为什么我没有正确解析? 对于我的C++作业,我必须分析如下句子: SET a = 10 SET b = a PRINT b

为什么我没有正确解析? 对于我的C++作业,我必须分析如下句子: SET a = 10 SET b = a PRINT b,c++,C++,为了解析这些语句,我使用了以下代码: vector<string> stringSplitter(istringstream& tmp) { vector<string> tokens; string str; while(tmp.good()) { tmp >> str; tokens.push_back(str); } return tokens; } 对于错误检查,我希望确保SET命令只有4个令牌

为了解析这些语句,我使用了以下代码:

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

我遇到的问题是,它适用于集合a=10和打印a 如果在句子的末尾有一个空格,比如SET a=10和PRINT a,那么它就不起作用了

有人能帮上忙吗?

>操作符使用空格进行标记化,因此,如果在=

相反,使用更高级的函数进行拆分。

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

而是使用更高级的函数进行拆分。

使用

while ( tmp >> str )
tmp.good只说明是否还有剩余的东西。您想知道从中提取另一个字符串是否有效。

使用

while ( tmp >> str )

tmp.good只说明是否还有剩余的东西。您想知道从中获取另一个字符串是否有效。

这里有一篇关于从std::string中修剪Whitespace的SO帖子:这里有一篇关于从std::string中修剪Whitespace的SO帖子:这在一般情况下可能是正确的,但OP的语法似乎非常严格。OP似乎还需要>>的标记化功能。这在一般情况下可能是正确的,但OP的语法似乎非常严格。OP似乎还需要>>的标记化功能。