2014-10-26 37 views
0

我是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

是的,这是因为你的后面没有分隔符(空格)。你可以做的是检查'(c == delimiter)|| (c =='\ n')' – kyflare 2014-10-26 21:41:26

+1

你明白了。如果你把这个作为答案,我会为你+1。非常感谢。 – user3761858 2014-10-26 21:45:38

回答

2

你应该改变分隔符形式是一个char是一个字符串,然后检查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; 
    } 
} 

这也应该在最后换行。

+0

您也可以使用cctype头并使用isspace(c)来检查它是否为空白区,但与旧C函数中的端口一样略为不推荐使用,并且这样更灵活,因为您可以选择所需的分隔符。 – Alexandru 2014-10-26 21:48:05

0

与您的代码,令牌推到向量空间后发现,由于存在是2后没有空间,2个不推。

,你可以做些什么来解决这个问题是在最后检查的换行符if(c == delimiter || c == '\n')

相关问题