[英]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.