循环遍历缺少最后一个字符的字符串

时间:2014-10-26 21:37:04

标签: c++ visual-c++

我是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”。我认为这是因为有线路(这是必要的,不值得解释“。

为什么会这样?

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')