| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1688 人关注过本帖
标题:后缀表达式变回中缀完全括号表达式
取消只看楼主 加入收藏
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
 问题点数:0 回复次数:1 
后缀表达式变回中缀完全括号表达式

#include <iostream>
#include <string>
#include <stack>
using namespace std;

string Change(string);

int main()
{
string exp;
while(1)
{
cout<<"请输入后缀表达式(数字)"<<endl;
getline(cin,exp);
if( exp == "#")
break;
cout<<"转换后的完全括号化的中缀表达式:"<<endl;
cout<<Change(exp)<<endl;
}
}

string Change(string exp)
{
string temp,answerexp,num_temp;
stack<string> s,s_change;
int count1 = 0,i = 0;
int flag =1;

while( i< exp.length())
{
if( exp[i] == ' ') i++;

else if( exp[i] == '*'|| exp[i] == '/' || exp[i] == '+' || exp[i] =='-')
{
count1 = 2; //这个是用来计算操作数的个数,因为遇到 一个 a b +这样类型的子表达式必
//然会变换成(a+b),而且只出栈两个操作数
temp += '(';
while( count1> 0)
{
s_change.push( s.top());
count1--;
s.pop();
}
while( !s_change.empty())
{
temp += s_change.top();
if( flag == 1) //这个是用来输入符号
{ temp += exp[i]; flag = 0;}
s_change.pop();
}
temp += ')';
flag = 1;
s.push( temp );
temp.clear();
i++;
}
else{
while( exp[i] >= '0' && exp[i] <= '9')
{
num_temp += exp[i]; //string类支持 +=操作,这语句实现多位数储存 例如 231
++i;
}
s.push( num_temp);
num_temp.clear(); //这个是因为要不断的取表达式的数字,如果不清空就会加多上次的记录
//例如 22 33 + 如果没有这句 那第二个操作数就会变成 2233 那显然错
}
}
answerexp += s.top();
s.pop();
return answerexp;
}

请输入后缀表达式(数字)
22 33 23 + - 22 -
转换后的完全括号化的中缀表达式:
((22-(33+23))-22)
请输入后缀表达式(数字)
#
Press any key to continue

2BOeWOTz.rar (8.42 KB) 后缀表达式变回中缀完全括号表达式



[此贴子已经被作者于2005-11-10 22:34:15编辑过]

搜索更多相关主题的帖子: string 括号 后缀 exp 
2005-10-20 12:29
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

没有错啊,我是用标准C++来写的,你用支持标准C++的编译器来运行吧,最好用VC.NET来运行.


c++/C + 汇编 = 天下无敌
2005-11-10 22:25
快速回复:后缀表达式变回中缀完全括号表达式
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025428 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved