资源简介
c++栈写的中缀表达式求解,可以计算包含()、/、*、+、-的表达式的解
代码片段和文件信息
#include
#include “Seqstack.h“
#include
#include
char bijiao(char chchar ch1);
double yusuan(double adouble bchar c);
double tiqu(double adouble bchar s[]);
using namespace std;
Seqstack intstack;
Seqstack charstack;
int main()
{
char str[30];int j=0;
while(true)
{
cout<<“请输入运算表达式“< cin>>str;
while(str[j]!=‘\0‘) //循环指向之后一个字符
{
j++;
}
if(str[j-1]!=‘#‘) //如果最后一个字符不是#
{
str[j]=‘#‘; //在字符串后面加#
str[j+1]=‘\0‘;
}
cout< charstack.push(‘#‘);//在字符栈里入栈#
char ch; //定义字符来保存栈顶的字符
for(int i=0;str[i]!=‘\0‘;i++)//循环处理字符串的每个字符
{
ch=charstack.getTop();
if(str[i]<=‘9‘&&str[i]>=‘0‘) //如果是运算符
{
int a=i; //记录此时i的位置
while(str[i+1]<=‘9‘&&str[i+1]>=‘0‘) //如果下个字符也是运算数一直循环读取整个数
{
i++;
}
double temp=tiqu(aistr); //将读到的字符串转化为整数
intstack.push(temp);
}
else //如果不是运算数则一定是运算符
{
if(str[i]==‘)‘) //如果是右括号循环判断栈顶是不是左括号
{
char s=charstack.getTop();
while(s!=‘(‘)//如果不是则出栈两个运算数一个运算符运算并将结果入栈
{
char c=charstack.pop();
double a=intstack.pop();
double b=intstack.pop();
double temp=yusuan(abc);
intstack.push(temp);
s=charstack.getTop();
}
charstack.pop();//如果是则将右括号出栈
continue; //处理下个字符
}
if(str[i]==‘(‘) //若果是左括号直接入栈
{
charstack.push(‘(‘);
continue;
}
if(bijiao(str[i]ch)==‘>‘)//如果该运算符优先级大于栈顶字符的优先级
{
charstack.push(str[i]); //入栈
//ch=str[i];
// cout< continue;
}
if(bijiao(str[i]ch)==‘<‘)//如果该运算符优先级小于栈顶字符的优先级
{
if(ch==‘(‘)//如果此时栈顶字符为左括号
{
charstack.push(str[i]); //直接入栈
continue;
} //否则出栈两个运算数一个运算符运算并将结果入栈继续处理该字符
double c=charstack.pop();
double a=intstack.pop();
double b=intstack.pop();
double temp=yusuan(abc);
intstack.push(temp);
i--;
//cout< continue;
}
if(bijiao(str[i]ch)==‘=‘) //如果该运算符等于栈顶字符
{
charstack.pop(); //出栈 处理完成
//cout< continue;
}
}
}
//cout< cout< //cout<
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-10-27 13:11 中缀表达式求解\
文件 4870 2013-10-27 13:08 中缀表达式求解\main.cpp
文件 526 2013-10-21 13:55 中缀表达式求解\Seqstack.h
- 上一篇:c++线程安全日志类
- 下一篇:c斗地主源码及实现
评论
共有 条评论