#2
word1232016-07-07 12:07
兄弟,这个拿去看一下
#include<stdio.h> #include<iostream.h> #define max 20 typedef struct { char data[max]; int top; }SeqStack; void chushihua(SeqStack *S) { S->top=-1; } void compvalue(SeqStack *S,char exp[],char e[]) { int i=0,j=0,k=0; while(exp[i]!='\0')//字符串的结束是\0 { if(exp[i]>='0' && exp[i]<='9'){ e[j]=exp[i]; j++; }else if(exp[i]=='('){ S->top++; S->data[S->top]=exp[i]; }else if(exp[i]==')'){ //输出一对括号内的所有运算符 while(S->data[S->top]!='('){ e[j]=S->data[S->top]; S->top--; j++; } S->top--;//删除栈顶( }else if(exp[i]=='+' || exp[i]=='-'){ //先判断栈是否为空,再比较栈顶符号 if(S->top!=-1){ if(S->data[S->top]=='+' || S->data[S->top]=='-' || S->data[S->top]=='*' || S->data[S->top]=='/') { e[j]=S->data[S->top]; S->top--; S->top++; S->data[S->top]=exp[i]; j++; }else{ //这种情况相当于栈顶是( S->top++; S->data[S->top]=exp[i]; } }else{ //栈空的处理情况 S->top++; S->data[S->top]=exp[i]; } }else if(exp[i]=='*' || exp[i]=='/'){ if(S->data[S->top]=='*' || S->data[S->top]=='/') { //取出栈顶的乘除符号,再把当前乘除符号压入栈顶 e[j]=S->data[S->top]; S->top--; S->top++; S->data[S->top]=exp[i]; j++; } else { //若栈顶是(或加减符号的话,暂时还不能出栈 S->top++; S->data[S->top]=exp[i]; } } i++;//指向存储的下一个字符 } while(S->top!=-1) { e[j++]=S->data[S->top]; S->top--; } e[j]='\0';//加上结束符,输出判断 puts(e);//输出后缀表达式 } int main() { SeqStack S; chushihua(&S); int i=0; char exp[20],e[20]; cout<<"请输入中缀表达式:"<<endl; gets(exp); compvalue(&S,exp,e); return 0; } |
#include<stdio.h>
#include<iostream.h>
#define TRUE 1
#define FALSE 0
#define max 50
typedef struct
{
char data[max];
int top;
}SeqStack;
void chushihua(SeqStack *S)
{
S->top=-1;
}
void compvalue(SeqStack *S,char exp[],char e[])
{
int i=0,j=0,k=0;
while(exp[i++]!='\n')
{
if(exp[i]>='0'&&exp[i]<='9'){
j++;
e[j]=exp[i];
}
if(exp[i]=='('){
S->top++;
S->data[S->top]=exp[i];
}
if(exp[i]==')')
{
while(S->data[S->top]!='('){
j++;
e[j]=S->data[S->top];
S->top--;
}
S->top--;
}
if(exp[i]=='+'||exp[i]=='-')
{
if(S->data[S->top]=='+'||S->data[S->top]=='-'||S->data[S->top]=='*'||S->data[S->top]=='/')
{
j++;
e[j]=S->data[S->top];S->top--;
S->top++;S->data[S->top]=exp[i];
}
else{
S->top++;
S->data[S->top]=exp[i];
}
}
if(exp[i]=='*'||exp[i]=='/')
{
if(S->data[S->top]=='*'||S->data[S->top]=='/')
{
j++;
e[j]=S->data[S->top];S->top--;
S->top++;S->data[S->top]=exp[i];
}
else
{
S->top++;
S->data[S->top]=exp[i];
}
}
}
while(S->top!=-1)
{
e[j++]=S->data[S->top];
S->top--;
}
while(e[k]!='\n')
{
cout<<e[k];
k++;
}
}
int main()
{
SeqStack S;
chushihua(&S);
int i=0;
char exp[20],e[20];
cout<<"请输入中缀表达式:"<<endl;
gets(exp);
chushihua(&S);
compvalue(&S,exp,e);
return 0;
}