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
答案 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)
您可以使用strtok,strtok_r或Boost tokenizer来做您需要的事情。
这些会阻止您将字符串拆分为多个分隔符。
如果要拆分多个线程的字符串,请使用strtok_r对抗strtok。
如果你需要一个例子,只需谷歌吧。