簡體   English   中英

C#字符串計算器

[英]C# string calculator

功能思想是充當計算器,輸入是帶有符號(* / +-)和數字的字符串,輸出是計算值示例:輸入:“ 5 * 7 + 32-2 * 5”輸出:“ 57”

static string Calculate(ref string s) {
        int left, right, leftOp, rightOp;
        string calculated, signPool = "*/+-";
        char sign;
        for (int j = 0; j < 4; j++) {
            sign = signPool[j];
            for (int i = s.IndexOf(sign); i != -1; i = s.IndexOf(sign)) {
                for (left = i-1; Char.IsDigit(s[left]); left--) { };
                left++;
                for (right = i+1; Char.IsDigit(s[right]); right++) { };
                right--;
                leftOp = Convert.ToInt32(s.Substring(left, i - left));
                rightOp = Convert.ToInt32(s.Substring(right, right - i));
                switch (sign) {
                    case '*':
                        calculated = Convert.ToString(leftOp * rightOp);
                        break;
                    case '/':
                        calculated = Convert.ToString(leftOp / rightOp);
                        break;
                    case '+':
                        calculated = Convert.ToString(leftOp + rightOp);
                        break;
                    case '-':
                        calculated = Convert.ToString(leftOp - rightOp);
                        break;
                }

                calculated = Convert.ToString(leftOp * rightOp);
                s = s.Replace(s.Substring(left, right - left + 1), calculated);
            }
        }
        return s;
    }

問題是variale的“ left”一直都變為0,請幫助

for (int i = s.IndexOf(sign); i != -1; i = s.IndexOf(sign)) {
            for (left = i-1; Char.IsDigit(s[left]); left--) { };
            left++;

注意for循環內的for循環。 您使用left作為循環變量,而應該使用其他變量作為循環條件。 嘗試分配一個變量,例如x = i-1; 如果您需要將左側更改為i-1,請在循環開始之前執行此操作。 我希望這有幫助。

您的計算器算法未遵循正確的PEMDAS規則。 乘法和除法是等效的運算,應在遇到時從左到右執行。 這意味着您需要從左向右移動的同時搜索乘法除法運算符。 當前,您正在從左到右執行所有乘法,然后再從左到右執行所有除法。

例如,請考慮以下問題:

5 * 7 / 5 * 2

用乘法和除法從左到右作為等效運算來解決:

// Correct
35 / 5 * 2
7 * 2
14

但是,使用您當前的算法求解,將得出不同的答案:

// Incorrect
35 / 5 * 2
35 / 10
3.5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM