【发布时间】:2020-01-18 14:32:51
【问题描述】:
我正在尝试解决一个问题,该问题评估像 10+20 这样的字符串中的简单表达式应该返回 30
问题是字符串可以包含空格,所以我使用stringstring 和skipws 标志它适用于字符串中的空格,如10 + 20 等,但是当空格最后它没有正确传递.
这就是我解析字符串的方式
void build_stack(const string& str) {
istringstream ss(str);
char op;
int op1, op2;
ss>>skipws>>op1;
operands.push(op1);
while(!ss.eof()) {
ss>>op;
operators.push(op);
ss>>op2;
operands.push(op2);
}
}
带有各种字符串输入的完整代码here in rextester。
当字符串为 3+5 / 2 时,我的堆栈构建为
operands => 2 2 5 3
operators => / / +
当字符串为3+5 / 2(即带有尾随空格)时,我的堆栈构建为
operands => 2 5 3
operators => / +
我试过了
while(ss.peek() == ' ') {
char c; ss>>c;
}
但这是在看到空格后删除所有字符。
【问题讨论】:
-
始终测试所有输入操作,例如使用运算符>>,并报告失败。还有stackoverflow.com/questions/5605125/…
-
请提供minimal reproducible example。不要这样做
while(!ss.eof())stackoverflow.com/questions/5837639/eof-bad-practice
标签: c++ string stringstream