为什么用这段代码解决后缀表达式会陷入死循环啊?
问题:所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
注:仅包含-、+、*、/运算,其中/是整除。操作数均是int范围内正整数且计算过程中不会超过int范围。
#include
using namespace std;
struct stack2{
int *elem;
int top_p;
void setup(){
elem=new int [10000];top_p=-1;
}
void clear(){
delete [] elem;
}
bool isEmpty(){
return top_p==-1;
}
void push(int x){
elem[++top_p]=x;
}
int pop(){
return elem[top_p--];
}
int top(){
return elem[top_p];
}
};
int main()
{
stack2 S;
S.setup();
char arr [10000]={};
cin>>arr;
int i=0;
while (arr[i]!='@')
{
if(arr[i]>='0'&&arr[i]<='9') S.push(int(arr[i]));
if(arr[i]=='.') continue;
if(arr[i]=='+') {
int i=S.pop();
int j=S.pop();
int a=j+i;
S.push(a);
}
if(arr[i]=='-') {
int i=S.pop();
int j=S.pop();
int a=j-i;
S.push(a);
}
if(arr[i]=='*') {
int i=S.pop();
int j=S.pop();
int a=j*i;
S.push(a);
}
if(arr[i]=='/') {
int i=S.pop();
int j=S.pop();
int a=j/i;
S.push(a);
}
i++;
}
int p=S.top();
cout<return 0;
}
if(arr[i]=='.') continue; 这一步导致死循环,在continue之前,要加上i++;才行,否则永远陷入这个if条件了