繁体   English   中英

为什么我的代码没有计算表达式字符串的正确值?

[英]Why is my code not calculating the correct value for the expression string?

在代码中我使用表达式树"3 + 2.53 - 1.75" ,它应该返回3.78的结果。 但是,它最终会添加字符串中的所有值并输出7.28 我在纸上多次遍历代码,试图查看在for循环的每次迭代中发生了什么,其中索引变量idistance_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM