2013-03-01 119 views
1

对于我的C之一++任务,我要解析这样的句子如下:为什么我不正确解析?

 
SET a = 10 
SET b = a 
PRINT b 

要解析器这些语句,我用下面的代码:

vector<string> stringSplitter(istringstream& tmp) { 
vector<string> tokens; 
string str; 
while(tmp.good()) { 
    tmp >> str; 
    tokens.push_back(str);    
} 
return tokens; 
} 

错误检查我要确保SET命令只有4个标记,而PRINT语句只有2个标记。

if (tokens.size() != 4) { 
cerr << "Error in Line "<< lineNumber <<":Invalid format\n"; 
return -1; 
} 

if (tokens.size() != 2) { 
cerr << "Error in Line "<< lineNumber <<":Invalid format\n"; 
return -1; 
} 

我遇到的问题是,它适用于“集A = 10”,“:我有当我检查设置命令和打印命令,以便相应的条件打印一个“ 因为它不起作用,如果在句末有一个空格,如”SET a = 10“和”PRINT a“

任何人都可以帮忙吗?

+0

这里有一个关于从std :: string修剪whitepace的SO帖子:http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring – 2013-03-01 16:22:58

回答

4

使用

while (tmp >> str) 

tmp.good()只是说是否有什么事都没有。你想知道是否得到另一个字符串的工作。

+0

我会尽力 – ueg1990 2013-03-01 17:08:28

+0

它的工作thnx很多 – ueg1990 2013-03-01 17:51:23

0

>>运算符使用空格进行标记,所以如果在=左右省略空格,就不会得到想要的结果。

而是使用更高级的功能来分割。

+2

这可能是正确的一般情况下,但看起来OP的语法非常严格。 OP也似乎*希望* >>的标记化特征。 – user7116 2013-03-01 16:27:01

相关问题