簡體   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