为什么我没有正确解析?

时间:2013-03-01 16:20:21

标签: c++

对于我的一个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个令牌。因此,当我检查SET命令和PRINT命令时,我有相应的条件:

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;
}

我遇到的问题是它适用于“SET a = 10”和“PRINT a” 如果在句子末尾有一个空格,如“SET a = 10”和“PRINT a”

,它就不起作用

任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

使用

while ( tmp >> str )

tmp.good()只说是否有任何遗漏。你想知道是否能从中获取另一个字符串。

答案 1 :(得分:0)

>>运算符使用空格进行标记化,因此如果在=周围省略空格,则无法获得所需内容。

而是使用更高级的功能进行拆分。