建议不会的看别人的代码自己在之上模拟一遍,仅仅要耐心模拟就会做出来
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?
pid=35
#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 1000 using namespace std; char s[N];//存储字符串 char str1[N];//存储'o'-到'9'的字符 char str2[N];//存储运算符 int top1,top2;//利用数组模拟栈 int compare(char x)//优先级比較 { switch(x) { case '+' : case '-' :return 1; case '*' : case '/' :return 2; case '(' :return 0; default: return -1; } } void zhuan()//转换 { int k; top1=-1,top2=-1;//初始化头 scanf("%s",s); k=strlen(s); for(int i=0;i<k;i++) { if(s[i]>='0'&&s[i]<='9'||s[i]=='.')//假设是数字进去str1数组中 { top1++; str1[top1]=s[i]; } else if(s[i]=='(')//假设是'('进入str2中 { top2++; str2[top2]=s[i]; } else if(s[i]==')')//假设是')'说明str2中有运算符 { while(str2[top2]!='(') { top1++; str1[top1]=' '; top1++; str1[top1]=str2[top2]; top2--; } top2--;//把'('出去 } else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')//假设是运算符比較优先级 { top1++; str1[top1]=' '; while(compare(s[i])<=compare(str2[top2]))//假设s[i]优先级低于之前也就是str2中的运算符 把str2中的运算符给str1 { top1++; str1[top1]=str2[top2]; top1++; str1[top1]=' '; top2--; } top2++; str2[top2]=s[i];//假设str2高进入str2 } } while(top2!=-1)//将剩余的进入str1中 { top1++; str1[top1]=' '; top1++; str1[top1]=str2[top2]; top2--; } top1++; str1[top1]=' '; top1++; str1[top1]='='; top1++; str1[top1]='