我是C ++的新手,我正在尝试逐个读取字符串中的每个字符。这就是我在做的事情:
string sum = "1 + 3 x 2\n";
char delimiter = ' ';
string token = "";
vector<string> tokens;
for(char c: sum)
{
if(c == delimiter)
{
tokens.push_back(token);
token = "";
}
else
{
token += c;
}
}
所以我基本上是在对我的字符串进行标记。在我看来,我应该最终:
tokens[0] = "1";
tokens[1] = "+";
tokens[2] = "3";
tokens[3] = "x";
tokens[4] = "2";
然而,当我运行这个时,我没有得到最终的“2”。我认为这是因为有线路(这是必要的,不值得解释“。
为什么会这样?
答案 0 :(得分:2)
你应该将作为字符的分隔符表单更改为字符串,然后检查c是否在该字符串中。
string sum = "1 + 3 x 2\n";
string delimiters = " \n";
string token = "";
vector<string> tokens;
for(char c: sum)
{
if(delimiters.find(c) != string::npos)
{
tokens.push_back(token);
token = "";
}
else
{
token += c;
}
}
这也应该考虑到最后的换行符。
答案 1 :(得分:0)
使用您的代码,在找到空格后将令牌推送到向量上。由于2之后没有空格,因此不会推动2。
您可以采取哪些措施来检查最后的换行符if(c == delimiter || c == '\n')