[英]Why is my code not calculating the correct value for the expression string?
在代码中我使用表达式树"3 + 2.53 - 1.75"
,它应该返回3.78
的结果。 但是,它最终会添加字符串中的所有值并输出7.28
。 我在纸上多次遍历代码,试图查看在for循环的每次迭代中发生了什么,其中索引变量i
和distance_operator
也被使用。 据我所知,我找不到程序继续添加每个浮点值的原因。 到达'-'
字符时,它应该减去下一个值。
distance_operator
用于偏离第一个运算符,其中索引i
将被旋转,以便我可以获取该字符串的一部分并使用substr()函数计算它。
float total = (float)value(expression[0]);
int distance_operator;
for (i = 1; i < expression.size(); i++) {
if (expression[i] == '+' || expression[i] == '-') {
distance_operator = i + 1;
while (expression[distance_operator] != '+' || expression[distance_operator] != '-') {
distance_operator++;
if (distance_operator == expression.size())
break;
}
if (expression[i] == '+')
total += std::stof(expression.substr(i, distance_operator - i));
else if(expression[i] == '-')
total -= std::stof(expression.substr(i, distance_operator - i));
}
}
代码几乎是正确的,但有一个“off-by-one”错误。
问题是,当找到-
正确使用的子字符串将是"- 1.75"
,当解析为数字时具有负值,并且您将减去它,基本上否定您想要使用的值。 累积代码应该是:
if (expression[i] == '+')
total += std::stof(expression.substr(i+1, distance_operator-i-1));
else if(expression[i] == '-')
total -= std::stof(expression.substr(i+1, distance_operator-i-1));
请注意,使用了i+1
,因此将跳过找到的表达式符号。
还要注意这个检查
while (expression[distance_operator] != '+' || expression[distance_operator] != '-')
永远都是真的,因为一个东西总是不同于A或者不同于B.正确的逻辑运算符是&&。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.