📄 text5.cpp
字号:
#include <iostream>
#include <cstdlib>
#include <string>
#include <stack>
using namespace std;
//栈内符号优先级
int is(const char c)
{
switch(c)
{
case '(': return 0;
case '+': return 2;
case '-': return 2;
case '*': return 4;
case '/': return 4;
case ')': return 5;
default: return -1;
}
}
//栈外符号优先级
int os(const char c)
{
switch(c)
{
case '(': return 6;
case '+': return 1;
case '-': return 1;
case '*': return 3;
case '/': return 3;
case ')': return 0;
default: return -1;
}
}
//四元式翻译
int translate1(string s)
{
stack<string> OPND;
stack<char> OPER;
char op;
string left, right;
int step = 0;
char sChange[10];
string sTemp;
cout << "转换成四元式:" << endl;
for (int i=0; i<(int)s.length(); i++)
{
if ( (s[i]>='0' && s[i]<='9') || (s[i]>='a' && s[i]<='z') )
{
sTemp = "";
sTemp += s[i];
OPND.push(sTemp);
}
else
{
while (!OPER.empty() && os(s[i])<is(OPER.top()))
{
right = OPND.top();
OPND.pop();
left = OPND.top();
OPND.pop();
op = OPER.top();
OPER.pop();
cout << "(" << step << ") ";
step++;
sTemp = _itoa(step, sChange, 10);
sTemp = "T" + sTemp;
OPND.push(sTemp);
cout << op << " " << left << " " << right << " " << sTemp << endl;
}
if(!OPER.empty() && os(s[i])==is(OPER.top()))
OPER.pop();
else
OPER.push(s[i]);
}
}
while (!OPER.empty())
{
right = OPND.top();
OPND.pop();
left = OPND.top();
OPND.pop();
op = OPER.top();
OPER.pop();
cout << "(" << step << ") ";
step++;
sTemp = _itoa(step, sChange, 10);
sTemp = "T" + sTemp;
OPND.push(sTemp);
cout << op << " " << left << " " << right << " " << sTemp << endl;
}
return 0;
}
int main()
{
string s;
while (true)
{
cout << "请输入一个算术表达式:" << endl;
cin >> s;
translate1(s);
cout << endl;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -