gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:41 24 4
gpt4 key购买 nike

在代码中,我使用了表达式树 "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));

}
}

最佳答案

代码几乎是正确的,但有一个“差一个”的错误。

问题是,当找到 - 时,使用的正确子字符串将是 "- 1.75",当解析为数字时为负值,您将是 减去它,基本上否定你想使用的值(value)。累积代码应该是:

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,所以找到的表达式符号会被跳过。

关于c++ - 为什么我的代码没有计算表达式字符串的正确值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56180396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com