对于我的一个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”
,它就不起作用任何人都可以帮忙吗?
答案 0 :(得分:4)
使用
while ( tmp >> str )
tmp.good()
只说是否有任何遗漏。你想知道是否能从中获取另一个字符串。
答案 1 :(得分:0)
>>
运算符使用空格进行标记化,因此如果在=
周围省略空格,则无法获得所需内容。
而是使用更高级的功能进行拆分。