簡體   English   中英

基於字符串的C#計算器中的負值

[英]Negative value in string based C# Calculator

我對編程比較陌生,而且我目前正在研究基於C#字符串的計算器。 很多它已經工作正常,但我有負系數的問題。 我的計算器引擎總是尋找下一個操作符並相應地計算,所以問題是如果我想計算“-5 + 6”,第一個操作是“-5”,但顯然無法計算。 如何區分運算符和系數? 到目前為止我想出了什么(整個代碼的小提取)

if (nextOperation.Contains("+"))
        {
            string firstOperationResult = Calculate(nextOperation.Split('+').ToList(), "+")[0];
            string partialFormulaReplacement = partialFormula.Replace(nextOperation, firstOperationResult);

            return CalculateDashOperation(partialFormulaReplacement);
        }

        else if (nextOperation.Contains("-") && nextOperation.IndexOf("-") > 0)
        {
            string resultOfFirstOperation = Calculate(nextOperation.Split('-').ToList(), "-")[0];
            string partialFormulaReplacement = partialFormula.Replace(nextOperation, resultOfFirstOperation);

            return CalculateDashOperation(partialFormulaReplacement);
        }
        //added
        else if (nextOperation.Contains("-") && nextOperation.IndexOf("-") == 0)
        {
            //what to do
        }
        //added
        return partialFormula;

“-5”可以被視為“0-5”,所以如果你在字符串的第一個位置看到一個操作數,你可以說隱含零。 請注意,此方法僅適用於運算符+和 - 。

至於嘗試再次計算“-5”的問題,我建議你使用0作為你的Calculate函數的參數,而不是將它預先添加到你正在處理的字符串中:

Calculate(new List<string>{"0", nextOperation[1]}, "-")

此外,正如評論中指出的那樣,這種方法不會涵蓋所有可能的情況,如果這不是一個學術練習,那么有解決方案已經解決了這個問題。

示例代碼看起來有點短。 但是我們試着建議:nextOperation是一個包含類似“1 * -6 + 6”的字符串

為了評估這個表達式,你必須首先“加密”你的字符串。 你正在尋找的主題是括號可以在這里找到基本(在python中)的一個很好的解釋。

但這個問題已在這里得到解答。

使用NCalc庫:

不要重新發明輪子,*和/優先級已經實現。

簡單的表達

Expression e = new Expression("2 + 3 * 5"); Debug.Assert(17 == e.Evaluate());

處理System.Math中的數學函數

Debug.Assert(0 == new Expression("Sin(0)").Evaluate()); Debug.Assert(2 == new Expression("Sqrt(4)").Evaluate()); Debug.Assert(0 == new Expression("Tan(0)").Evaluate());

暫無
暫無

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

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