使用C++實現計算器

一、計算器實現的思路

在計算器的實現中,需要將用戶輸入的算式轉換成計算機可以識別和處理的形式,然後進行計算並輸出結果。

第一步是將用戶輸入的中綴表達式轉換成後綴表達式,這樣方便計算機進行計算。在轉換中,需要注意運算符的優先順序。

第二步是將轉換後的後綴表達式利用棧進行計算,遇到操作數則壓入棧中,遇到運算符則出棧兩個操作數進行運算,並將運算結果壓入棧中。

第三步是將棧中最後一個元素即為計算結果,將其輸出給用戶。

二、中綴轉後綴的實現

中綴表達式轉後綴表達式可以使用棧來實現,在將運算符壓入棧中前需要彈出優先順序比它高或相等的運算符。

vector infix2postfix(vector infix){
    stack s;
    vector postfix;
    map priority;
    priority["+"] = 1;
    priority["-"] = 1;
    priority["*"] = 2;
    priority["/"] = 2;
    priority["("] = 0;
    for(int i=0;i=priority[token]){
                postfix.push_back(s.top());
                s.pop();
            }
            s.push(token);
        }
    }
    while(!s.empty()){
        postfix.push_back(s.top());
        s.pop();
    }
    return postfix;
}

三、後綴表達式的計算實現

後綴表達式的計算可以使用棧來實現,在遇到操作數時將其壓入棧中,在遇到運算符時彈出棧頂的兩個元素進行計算,將結果再次壓入棧中。

int eval_postfix(vector postfix){
    stack s;
    for(int i=0;i<postfix.size();i++){
        string token = postfix[i];
        if(isdigit(token[0])){
            s.push(stoi(token));
        }
        else{
            int b = s.top();
            s.pop();
            int a = s.top();
            s.pop();
            if(token=="+"){
                s.push(a+b);
            }
            else if(token=="-"){
                s.push(a-b);
            }
            else if(token=="*"){
                s.push(a*b);
            }
            else{
                s.push(a/b);
            }
        }
    }
    return s.top();
}

四、完整代碼示例

#include 
#include 
#include 
#include 

using namespace std;

vector infix2postfix(vector infix){
    stack s;
    vector postfix;
    map priority;
    priority["+"] = 1;
    priority["-"] = 1;
    priority["*"] = 2;
    priority["/"] = 2;
    priority["("] = 0;
    for(int i=0;i=priority[token]){
                postfix.push_back(s.top());
                s.pop();
            }
            s.push(token);
        }
    }
    while(!s.empty()){
        postfix.push_back(s.top());
        s.pop();
    }
    return postfix;
}

int eval_postfix(vector postfix){
    stack s;
    for(int i=0;i<postfix.size();i++){
        string token = postfix[i];
        if(isdigit(token[0])){
            s.push(stoi(token));
        }
        else{
            int b = s.top();
            s.pop();
            int a = s.top();
            s.pop();
            if(token=="+"){
                s.push(a+b);
            }
            else if(token=="-"){
                s.push(a-b);
            }
            else if(token=="*"){
                s.push(a*b);
            }
            else{
                s.push(a/b);
            }
        }
    }
    return s.top();
}

int main() {
    string input;
    getline(cin, input);
    vector infix;
    string token = "";
    for(int i=0;i<input.length();i++){
        if(input[i]==' '){
            infix.push_back(token);
            token = "";
        }
        else{
            token += input[i];
        }
    }
    infix.push_back(token);
    vector postfix = infix2postfix(infix);
    int result = eval_postfix(postfix);
    cout << result << endl;
    return 0;
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/297149.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-28 12:15
下一篇 2024-12-28 12:15

相關推薦

  • 匯率兌換計算器

    匯率兌換計算器是一款方便快捷的工具。它可以將一種貨幣的價值換算成另一種貨幣的價值,幫助人們更好地理解並計算不同貨幣之間的價格。 一、頁面設計 匯率兌換計算器的頁面設計應該簡潔明了,…

    編程 2025-04-27
  • Python製作簡易計算器

    本文將從多個方面,詳細闡述如何使用Python製作簡易計算器。 一、GUI界面設計 要製作一個簡易計算器,我們需要先計劃好它的GUI界面,以方便用戶的使用。在Python中,我們可…

    編程 2025-04-27
  • 工期日曆天計算器

    一、計算器介紹 工期日曆天計算器是一款計算機程序,用於計算一個任務或項目的完成時間。 用戶可以指定開始日期,工作日曆和任務工期。該計算器能夠自動排除非工作日和特殊工作日期,以提供客…

    編程 2025-04-24
  • 度分秒計算器在線使用

    度分秒是一個在地學和導航定位中常用的角度計量單位,通常情況下需要進行角度單位換算。而度分秒計算器在線使用就是一個便捷的工具,能夠幫助用戶快速地進行單位換算。本文將就度分秒計算器在線…

    編程 2025-04-12
  • 反三角函數計算器在線

    一、介紹 反三角函數計算器是一種通過輸入三角函數的值,返回對應角度值的工具,反三角函數包括反正弦、反餘弦和反正切函數。 在計算幾何學、三角函數、物理學等領域,反三角函數的應用十分廣…

    編程 2025-04-12
  • ArcGIS柵格計算器con函數的應用

    一、con函數簡介 con函數是ArcGIS柵格計算器中的一種邏輯函數,主要功能是根據指定的條件,從兩個柵格中選擇相應的像元值來創建一個新的柵格。 Con (condition, …

    編程 2025-04-12
  • 用Python編寫分秒計算器

    分秒計算器是一款簡單實用的計算工具,可以幫助人們快速計算時間。本文將從多個方面詳細闡述該計算器,包括功能介紹、演算法實現、代碼解析等。 一、功能介紹 分秒計算器主要有兩個功能,分別是…

    編程 2025-02-01
  • 平方米換算畝計算器

    在農業生產過程中,經常需要用到畝數作為計量單位,而現在很多地方已經使用平方米作為測算單位,這時我們需要一個平方米轉化為畝的計算器。下面將從多個方面進行詳細闡述。 一、計算原理 平方…

    編程 2025-02-01
  • GIS柵格計算器:使用Python實現

    一、介紹 GIS柵格計算器是地理信息科學中常用的工具之一,它可以用於柵格數據的計算、處理和分析。在GIS柵格計算器中,我們可以使用Python語言進行編程實現,Python提供了許…

    編程 2025-01-20
  • c語言模擬計算,c語言模擬計算器輸入兩個整數和一個運算符

    本文目錄一覽: 1、c語言模擬簡單計算,無優先順序,只計算加減乘除,輸入沒有空格 2、C語言模擬計算器的功能,要求至少能實現基本四則運算(加減乘除功能),要求提示明確.能用/*說明代…

    編程 2025-01-16

發表回復

登錄後才能評論