註冊
登錄
論壇
搜索
幫助
導航
私人消息 (0)
公共消息 (0)
系統消息 (0)
好友消息 (0)
帖子消息 (0)
種子論壇 | 高雄市資訊培育協會學員討論區
»
結訓課程 (青少年程式設計班)
»
C/C++
» 2011 1001 (中序轉後序 )
返回列表
發帖
發短消息
加為好友
buy
(買大)
當前離線
肉腳工程師
UID
65
帖子
149
精華
0
積分
0
閱讀權限
100
來自
高雄
在線時間
31 小時
註冊時間
2010-10-1
最後登錄
2011-10-29
版主
1
#
跳轉到
»
倒序看帖
打印
字體大小:
t
T
buy
發表於 2011-10-1 20:31
|
只看該作者
2011 1001 (中序轉後序 )
// Test.cpp : 定義主控台應用程式的進入點。
//
#include "stdafx.h" // 不要管
#include<iostream>
#include<sstream>
using namespace std;
//宣告一個資料型態叫做Stack
class StackChar{
private:
int top; //紀錄目前index位置
public:
char stack[1000]; //放資料的地方
StackChar()
{
top = -1; // 沒有東西
};
void push(char input)
{
stack[++top] = input;
};
char pop()
{
return stack[top--];
};
char peak()
{
return stack[top];
};
bool IsEmpty()
{
return (top <= -1)? true : false;
}
};
//宣告一個資料型態叫做Stack
class StackInteger{
private:
int top; //紀錄目前index位置
public:
int stack[1000]; //放資料的地方
StackInteger()
{
top = -1; // 沒有東西
};
void push(int input)
{
stack[++top] = input;
};
int pop()
{
return stack[top--];
};
int peak()
{
return stack[top];
};
bool IsEmpty()
{
return (top <= -1)? true : false;
}
};
int order(char op); // 取得 算數優先權 */ > +-
string infixToPostfix(string infix); // 中序轉後序
int pofixComput(string pofix);
int _tmain(int argc, _TCHAR* argv[]) //int main()
{
string input;
getline(cin, input);
//string postfix = infixToPostfix(input);
cout << endl << pofixComput(
infixToPostfix(input)
);
string str;
getline(cin, str);
return 0;
}
// 取得 算數優先權 */ > +-
int order(char op)
{
int returnValue = 0;
switch(op)
{
case '*' :
case '/' :
returnValue = 2;
break;
case '+':
case '-':
returnValue = 1;
break;
default:
returnValue = 0;
break;
}
return returnValue;
}
// 中序轉後序
string infixToPostfix(string infix)
{
istringstream issstream(infix); //輸入
ostringstream postfix; //輸出
string word; // 暫時儲存 temp
StackChar stack;
while(issstream >> word)
{
if( isdigit(word[0]))
{
postfix << word << " ";
}
else
{
switch(word[0])
{
case '(':
stack.push('(');
break;
case ')':
while(stack.peak() != '(' )
{
postfix << stack.pop() << " ";
}
stack.pop();
break;
case '+': case '-': case '*': case '/':
if( stack.IsEmpty()) //如果Stack沒資料
{
stack.push(word[0]);
}
else //如果Stack至少有一個資料
{
if( order(word[0] ) > order( stack.peak() ) )
{
stack.push(word[0]);
}
else
{
do{
postfix << stack.pop() << " ";
}while //如果還有資料 且 優先權小於等於目前的word[0],繼續pop()
( !stack.IsEmpty() &&
order(word[0]) <= order( stack.peak() )
);
stack.push(word[0]);
}
}
break;
default:
break;
}
}
}
//清空stack
if(stack.IsEmpty() ) //如果沒資料
{
;
}
else
{
do{
postfix << stack.pop() << " ";
}while( !stack.IsEmpty() );
}
return postfix.str();
}
// 後序 計算
int pofixComput(string pofix)
{
istringstream issstream(pofix); //輸入
string word;
StackInteger stackInt;
int i , j ;
while( issstream >>word )
{
if(isdigit(word[0])) //如果是數字
{
stackInt.push(
atoi(word.c_str())
);
}
else // 如果不是數字
{
i = stackInt.pop();
j = stackInt.pop();
switch(word[0])
{
case '+':
stackInt.push(j + i);
break;
case '-':
stackInt.push(j - i);
break;
case '*':
stackInt.push(j * i);
break;
case '/':
stackInt.push(j / i);
break;
default:
break;
}
}
} // End While
return stackInt.pop();
}
複製代碼
收藏
分享
Mai 買大誠 [E-Mail : mainword@dlinfo.tw, mainword@gmail.com] 手機 : 0911-116194
Sun Certified Java Programmer
DL Info 鼎侖資訊 [886-7-969-0998] 高雄市苓雅區光華一路206號6樓之2
返回列表
111Python夏令營(一)
快樂 C++11208週六19:00
烏林國小Scratch108
App快速開發實作班 (App Inventor)
谷哥人營隊
113Scratch夏令營
113年APCS冬令營
113年Scratch冬令營
113年Python證照特訓營(一)
113年谷哥人程式體驗營
113年國三專班
Python研習營(113_114)
113年Python證照特訓營(二)
113年程式夏令營(一)(二)
113年APCS夏令營(一)(二)
Python研習營
113年Python研習冬令營
112年國三專班
112APCS夏令營(一)(二)
112App快速開發夏令營
C語言 / C++ (特別輔導)
C++證照
C#
家教特輔
C語言特輔/證照(家教)
C++證照
C#
HTML5+CSS+JavaScript+PHP+MySQL
Java 家教 (王捷恩)
113新版塊名稱
快樂學 Scratch
Python 家教 (王捷恩 康恒睿)
Python 特別輔導 (家教)
快樂 C++ (家教)
我愛 Java (家教)
程式解題我最行 (家教)
程式常態班
C++ 新生挑戰區
考照心得分享
快樂 C++11307週五19:00
快樂C++11309週六13:30-15:30
快樂 C++11303 (週六15:40-17:40) 3F
程式解題我最行 (週六15:30-17:30) 3F
快樂 C++ (週六13:30-15:30) 3F
快樂 C++ (週六19:00-21:00) 3F
程式解題我最行 (週六10:00-12:00) 3F
快樂學 Scratch
程式解題我最行(週五19:00-21:00)
快樂 C++ (週六13:30-15:30) 3F
程式解題我最行(週三19:15-21:15)
快樂 C++11207週六10
快樂 C++11208週六19:00
程式解題我最行 (週五19:00-21:00) 3F
快樂 C++ (週六15:30-17:30) 3F
程式解題我最行 (週六19:00-21:00) 3F
程式解題我最行 (週四19:10-21:10)
產投職訓
結訓課程 (產投職訓)
Php & MySQL old
Illustrator old
Dreamweaver old
Android手機程式開發班
PHP & MySQL電子商務互動式網站實作班 (102下)
PHP & MySQL (102上)
PHP & MySQL電子商務互動式網站實作班
Photoshop數位影像設計初階
Flash創意廣告動畫初階
行銷短片視訊剪輯
數位商業攝影實務班
PHP & MySQL電子商務系統開發實務初階班
電子商務系統開發實務中階班
Server基礎架設&動態網頁設計初階班
Java視窗應用程式設計與遊戲開發班
Illustrator時尚插畫創作設計初階班
102上Php & MySQL 初階班
電子商務互動式網站實作中階
Dreamweaver多媒體網頁設計
Android手機程式開發班(2012年10月)
PHP & MySQL (2012年10月)
創意塗鴉
yahoo橫幅
google橫幅
市民學苑
第二屆樂活部落格
第一屆電腦設備簡易維護和故障排除班
專案訓練
電子商務創業班
TQC PHP認證
投資理財班
領隊導遊班
電腦基礎及網路應用身心障礙專班
應用軟體網頁化開發
[收藏此主題]
[關注此主題的新回復]
[通過 QQ、MSN 分享給朋友]