В коде я использую дерево выражений "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));
}
}