C ++ tokenise字符串和存储在向量中

时间:2017-04-23 03:59:17

标签: c++ string vector evaluation

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

2 个答案:

答案 0 :(得分:0)

2可以解决问题的更新:

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

char ch;
while(in >> ch)

然后处理空格(和换行符?)的情况下放一个 if condition

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

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

答案 1 :(得分:0)

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

这些会阻止您将字符串拆分为多个分隔符。

如果要拆分多个线程的字符串,请使用strtok_r对抗strtok。

如果你需要一个例子,只需谷歌吧。