这题也不难,模拟一下栈,若搜到字符为+-则弹出栈顶,若搜到字符为*/且不为+-则弹出栈顶,然后把搜到的操作字符压入栈顶,字母就输出。
#include<cstdio> #include<cstring> char s[500],symbol[500]; int num[500],i,j,t,r; int main(){ int t; scanf("%d",&t); while(t--){ scanf("%s",s); memset(symbol,0,sizeof(symbol)); memset(num,0,sizeof(num)); r=0;i=0;j=0; while(i<strlen(s)){ if (s[i]==‘(‘){ r++; }else if (s[i]>96&&s[i]<123) putchar(s[i]); else if (s[i]==‘)‘){ putchar(symbol[j]); j--; }else if (s[i]==‘+‘||s[i]==‘-‘){ if (j!=0&&r==num[j]){ putchar(symbol[j]); j--; } symbol[++j]=s[i]; }else if(s[i]==‘*‘||s[i]==‘/‘){ if (j!=0&&r==num[j]&&symbol[j]!=‘+‘&&symbol[j]!=‘-‘){ putchar(symbol[j]); j--; } symbol[++j]=s[i]; }else if (s[i]==‘^‘){ symbol[++j]=s[i]; } i++; } printf("\n"); } }
时间: 2024-10-13 12:21:42