【问题标题】:C++ tokenise string and store in vectorC++ 标记字符串并存储在向量中
【发布时间】:2017-04-23 03:59:17
【问题描述】:
vector<string> ExprTree::tokenise(string expression){
     vector<string> store;
     string s;
     std::stringstream in(expression);
while(in >> s) {
  store.push_back(s);

    }

     return store;

}

当我输入算术表达式 (5 + 5) + 5

我得到输出:

(5
+
5)
+
5

随心所欲:

(
5
+
5
)
+
5

另外,代码只分隔空格之间的字符串,是否可以对没有空格的字符串进行标记?即 (5+5)+5

【问题讨论】:

标签: c++ string vector evaluation


【解决方案1】:

2 个更新可以解决您的问题:

string s;
while(in >> s)
//instead, do 

char ch;
while(in >> ch)

然后为了处理空格(和换行符?)的情况,放一个 if 条件

if(ch != ' ')
store.push_back(ch);

也就是说,如果您想要的输入只是个位数。 您必须制作一个非常复杂的解析器来处理更大的数字。 要制作更复杂的解析器,此功能很有帮助。 http://www.cplusplus.com/reference/istream/istream/peek/

【讨论】:

    【解决方案2】:

    您可以使用strtokstrtok_rBoost tokenizer 来做您需要的事情。

    这些阻止你用多个分隔符分割你的字符串。

    如果你想用多个线程分割字符串,使用 strtok_r 反对 strtok。

    如果您需要示例,只需在 Google 上搜索即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 2010-12-26
      • 1970-01-01
      • 2010-09-20
      相关资源
      最近更新 更多