欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中綴表達式轉后綴表達式的方法

 更新時間:2020年04月26日 16:25:29   作者:WuYaoBing  
這篇文章主要介紹了C++中綴表達式轉后綴表達式的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++中綴表達式轉后綴表達式的具體代碼,供大家參考,具體內容如下

1、初始化兩個棧:運算符棧s1和儲存中間結果的棧s2;

2、從左至右掃描中綴表達式;

3、遇到操作數(shù)時,將其壓s2;

4、遇到運算符時,比較其與s1棧頂運算符的優(yōu)先級:

1)、如果s1為空,或棧頂運算符為左括號“(”,則直接將此運算符入棧;
2)、否則,若優(yōu)先級比棧頂運算符的高,也將運算符壓入s1
3)、否則,將s1棧頂?shù)倪\算符彈出并壓入到s2中,再次轉到(4-1)與s1中新的棧頂運算符相比較;

5、遇到括號時:

1)、如果是左括號“(”,則直接壓入s1;
2)、如果是右括號“)”,則依次彈出s1棧頂?shù)倪\算符,并壓入s2,直到遇到左括號為止,此時將這一對括號丟棄;

6、重復步驟2至5,直到表達式的最右邊;

7、將s1中剩余的運算符依次彈出并壓入s2;

8、依次彈出s2中的元素并輸出,結果的逆序即為中綴表達式對應的后綴表達式

代碼:

#include<iostream>
#include<cstring>
#include<algorithm> 
#include<stack>
using namespace std;
 
stack<char> s1; //運算符棧 
stack<char> s2; //中間結果棧 
 
int f(const char str){
 int yxj; //優(yōu)先級 
 switch(str){
 case '*':yxj=5;break;
 case '/':yxj=5;break;
 case '+':yxj=4;break;
 case '-':yxj=4;break;
 }
 return yxj;
 
}
int main(){
 char c[100]="(12+4-13)+6*2";
 //char c[100]="1+((2+3)*4)-5";
 int lenc=strlen(c);
 //讀取字符串 
 for(int i=0;i<lenc;i++){
 if(c[i]>='0'&&c[i]<='9'){ //如果是數(shù)字,直接壓入s2 
 s2.push(c[i]);
 }else if(c[i]=='+'||c[i]=='-'||c[i]=='*'||c[i]=='/'){ //如果是運算符 
 while(true){
 if(s1.empty()||s1.top()=='('){ //s1為空 ,或者棧頂為( 
 s1.push(c[i]);
 break;
 }else if(f(c[i])>f(s1.top())){ //當前運算符優(yōu)先級大于s1棧頂運算符優(yōu)先級 
 s1.push(c[i]);
 break;
 }
 else{ //小于等于 
 char cc=s1.top();
 s1.pop();
 s2.push(cc);
 }
 }
 }else{
 if(c[i]=='('){ //直接讀入 
 s1.push(c[i]);
 }else{
 while(s1.top()!='('){
 char ccc=s1.top();
 s1.pop();
 s2.push(ccc);
 }
 s1.pop();
 }
 }
 }
 while(!s1.empty()){
 char cccc=s1.top();
 s2.push(cccc);
 s1.pop();
 }
 
 //while(!s2.empty()){ //結果是逆序的 
 // cout<<s2.top();
 // s2.pop();
 //}
 while(!s2.empty()){
 char c=s2.top();
 s1.push(c);
 s2.pop();
 }
 while(!s1.empty()){ 
 cout<<s1.top();
 s1.pop();
 }
 
 return 0;
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C++ 類的賦值運算符''''=''''重載的方法實現(xiàn)

    C++ 類的賦值運算符''''=''''重載的方法實現(xiàn)

    這篇文章主要介紹了C++ 類的賦值運算符'='重載的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • C語言 詳解字符串基礎

    C語言 詳解字符串基礎

    在 C 語言中,字符串實際上是使用空字符 \0 結尾的一維字符數(shù)組。因此,\0 是用于標記字符串的結束??兆址∟ull character)又稱結束符,縮寫 NUL,是一個數(shù)值為 0 的控制字符,\0 是轉義字符,意思是告訴編譯器,這不是字符 0,而是空字符
    2022-04-04
  • C語言實現(xiàn)貪吃蛇游戲代碼

    C語言實現(xiàn)貪吃蛇游戲代碼

    大家好,本篇文章主要講的是C語言實現(xiàn)貪吃蛇游戲代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • C++實現(xiàn)日期類的方法詳解

    C++實現(xiàn)日期類的方法詳解

    這篇文章主要給大家介紹了C++實現(xiàn)日期類的方法,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • C++如何過濾出字符串的中文(GBK、UTF-8)

    C++如何過濾出字符串的中文(GBK、UTF-8)

    這篇文章主要給大家介紹了關于C++如何過濾出字符串的中文的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • 詳解C語言中strpbrk()函數(shù)的用法

    詳解C語言中strpbrk()函數(shù)的用法

    這篇文章主要介紹了詳解C語言中strpbrk()函數(shù)的用法,是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08
  • C++入門筆記之std::vector容器詳解

    C++入門筆記之std::vector容器詳解

    這篇文章主要給大家介紹了關于C++之std::vector容器的相關資料,vector,一種隨機訪問的數(shù)組類型,它提供了對數(shù)組元素的快速、隨機訪問,以及在序列尾部快速、隨機的插入和刪除操作,需要的朋友可以參考下
    2021-07-07
  • C++中常見容器類的使用方法詳解(vector/deque/map/set)

    C++中常見容器類的使用方法詳解(vector/deque/map/set)

    C++中常見的容器類有vector、list、deque、map、set、unordered_map和unordered_set。下面將舉例直接說明各個容器的使用方法,希望對大家有所幫助
    2023-03-03
  • C 語言指針變量詳細介紹

    C 語言指針變量詳細介紹

    本文主要介紹C 語言指針變量,這里詳細介紹了 C語言中指針變量的用法,并附代碼示例及指針變量指向關系圖幫助大家理解指針,有學習C語言指針的朋友可以參考下
    2016-08-08
  • C++圖解單向鏈表類模板和iterator迭代器類模版詳解

    C++圖解單向鏈表類模板和iterator迭代器類模版詳解

    這篇文章主要為大家詳細介紹了C++圖解單向鏈表類模板和iterator迭代器類模版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02

最新評論