日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
C++中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式具體實(shí)現(xiàn)方法

本篇文章重點(diǎn)為大家分享一下C++中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式具體實(shí)現(xiàn)方法,有需要的小伙伴可以參考一下。

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),沁陽(yáng)企業(yè)網(wǎng)站建設(shè),沁陽(yáng)品牌網(wǎng)站建設(shè),網(wǎng)站定制,沁陽(yáng)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,沁陽(yáng)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

一、思路:和中綴表達(dá)式的計(jì)算類似,只不過(guò)不用計(jì)算,把表達(dá)式輸出即可

1.用字符數(shù)組存儲(chǔ)整行輸入的中綴表達(dá)式;

2.接著從字符數(shù)組的0位置開(kāi)始判斷字符,如果是數(shù)字,那就要判斷后面是否是數(shù)字,如果是就不斷掃描組成一個(gè)整數(shù)

(暫不考慮負(fù)數(shù)和小數(shù)),最終組成一個(gè)整數(shù),然后輸出這個(gè)數(shù)(因?yàn)椴挥糜?jì)算,所以直接輸出即可);

3.如果是左括號(hào),直接進(jìn)符號(hào)棧;

4.如果是操作運(yùn)算符,與符號(hào)棧的棧頂元素比較優(yōu)先級(jí):如果高就壓入棧;

低,就取出符號(hào)棧頂?shù)脑剌敵觯?/p>

接著,再判斷符號(hào)棧頂?shù)脑睾彤?dāng)前的運(yùn)算符號(hào)繼續(xù)比較優(yōu)先級(jí),重復(fù)前面步驟,直到棧空或者當(dāng)前的符號(hào)優(yōu)先級(jí)高;

5.如果是右括號(hào),把符號(hào)棧棧頂?shù)脑厝〕?,如果不是左括?hào),把取出的運(yùn)算符輸出,接著取符號(hào)棧棧頂?shù)脑兀钡椒?hào)棧中取出的符號(hào)是左括號(hào);

6.當(dāng)掃描完字符數(shù)組時(shí),判斷符號(hào)棧是否為空:

不為空,把符號(hào)棧棧頂?shù)脑厝〕?,輸出到窗口,直到符?hào)棧為空。

二、實(shí)現(xiàn)程序:

// 中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式
// 操作符:+、-、*、/、%
// 輸入:可以用cin.getline(arr, 250)或者cin.get(ch) && ch != '\n'
// 測(cè)試數(shù)據(jù):輸入格式:(注意:不能有中文的操作符)
//      2+(3+4)*5
//      16+2*30/4
//   輸出格式:
//     2 3 4 + 5 * +
//     16 2 30 * 4 / +
 
#include
#include
 
// 判斷是否是操作符
bool isOperator(char ch) {
 if(ch == '+' || ch == '-' || ch == '*' || ch == '/')
   return true;
 return false; // 否則返回false
}
 
// 獲取優(yōu)先級(jí)
int getPriority(char ch) {
 int level = 0; // 優(yōu)先級(jí)
 
 switch(ch) {
   case '(':
     level = 1;
     break;
   case '+':
   case '-':
     level = 2;
     break;
   case '*':
   case '/':
     level = 3;
     break;
   default:
     break;
 }
 return level;
}
 
int main(int argc, const char * argv[]) {
 // insert code here...
 int num;
 char arr[250]; // 一個(gè)一個(gè)的讀取表達(dá)式,直到遇到'\0'
 std::stack op; // 棧op:存儲(chǔ)操作符
 
 while(1) {
   std::cin.getline(arr,250);
   int len, i;
   char c; // c存儲(chǔ)從棧中取出的操作符
   
   len = (int)strlen(arr); // strlen()輸出的是:unsigned long類型,所以要強(qiáng)制轉(zhuǎn)換為int類型
   i = 0;
   while(i if(isdigit(arr[i])) { // 如果是數(shù)字
       num = 0;
       do {
         num = num * 10 + (arr[i] - '0'); // ch - 48根據(jù)ASCAII碼,字符與數(shù)字之間的轉(zhuǎn)換關(guān)系
         i++; // 下一個(gè)字符
       }while(isdigit(arr[i]));
       std::cout " ";
     } else if(arr[i] == '(') { // (:左括號(hào)
       op.push(arr[i]);
       i++;
     } else if(isOperator(arr[i])) { // 操作符
       if(op.empty()) {// 如果???,直接壓入棧
         op.push(arr[i]);
         i++;
       }
       else {
         // 比較棧op頂?shù)牟僮鞣cch的優(yōu)先級(jí)
         // 如果ch的優(yōu)先級(jí)高,則直接壓入棧
         // 否則,推出棧中的操作符,直到操作符小于ch的優(yōu)先級(jí),或者遇到(,或者棧已空
         while(!op.empty()) {
           c = op.top();
           if(getPriority(arr[i]) " ";
             op.pop();
           } else // ch優(yōu)先級(jí)高于棧中操作符
             break;
         } // while結(jié)束
         op.push(arr[i]); // 防止不斷的推出操作符,最后空棧了;或者ch優(yōu)先級(jí)高了
         i++;
       } // else
     } else if(arr[i] == ')') { // 如果是右括號(hào),一直推出棧中操作符,直到遇到左括號(hào)(
       while(op.top() != '(') {
         std::cout " ";
         op.pop();
       }
       op.pop(); // 把左括號(hào)(推出棧
       i++;
     } else // 如果是空白符,就進(jìn)行下一個(gè)字符的處理
       i++;
   } // 第二個(gè)while結(jié)束
   while(!op.empty()) { // 當(dāng)棧不空,繼續(xù)輸出操作符
     std::cout " ";
     op.pop();
   }
   std::cout while結(jié)束
 return 0;
}

運(yùn)行結(jié)果:


當(dāng)前題目:C++中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式具體實(shí)現(xiàn)方法
鏈接地址:http://www.5511xx.com/article/dhjcdio.html