【问题标题】:Split string using star in C++在 C++ 中使用星号分割字符串
【发布时间】:2013-02-19 07:50:01
【问题描述】:

我必须根据星号 (*) 拆分字符串。例如,如果我得到一个像"a*a" 这样的字符串,那么我必须得到结果"a",我通过拆分字符串 API 在 C++ 中实现了这个结果。但是如果我得到一个像"12*12*12*12" 这样的字符串,那么我必须得到"12*12" 作为结果。我有一个想法来实现这一点,方法是采用中间星位并拆分字符串。是否可以通过 STL 正则表达式或任何其他简单的方式来实现。

谢谢 拉姆库马尔

【问题讨论】:

  • 如果您的输入是 12*12*12 会发生什么?
  • 它永远不会发生,因为我从其他模块获取这个字符串并且它总是复制字符串并在它们之间放置星号(string1 * string1)。我不能改变那个模块的行为......
  • 你的意思是信息重复n次?这到底有多蠢?

标签: c++ string split


【解决方案1】:

在 cmets 之后,我得出结论 split 不太适合这种情况。请改用substr

 int len = str.length();
 string splittedPart = str.substr(len/2 + 1); //second half

【讨论】:

  • 没错,星星是无关紧要的,你把字符串分成了一半。
【解决方案2】:

如果你确定你总是有奇数颗星星,找那个中间的旧的:

std::string input;
std::vector<unsigned> star_positions;

for (unsigned i = 0; i < input.size(); ++i)
{
    if (input[i] == '*')
        star_positions.push_back(i);
}

unsigned split_position = star_positions[star_positions.size()/2];

std::string input_L = input.substr(0, split_position);
std::string input_R = input.substr(split_position+1, input.size());

【讨论】:

    【解决方案3】:

    为什么不在 Star 上继续拆分并将结果放入向量中。然后您可以轻松地从向量中检索原始字符串的前半部分和后半部分。想想如果你有偶数颗星星会发生什么

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 2020-08-30
      • 1970-01-01
      • 2020-10-25
      相关资源
      最近更新 更多