Я использую стек и postfixParser. Вместо сохранения 3 он решает вернуть go и сохранить предыдущее число, но я не понимаю, почему он это сделал. Вот мой код:
int postfixParser(string a)
{
cout<<a<<endl;
LinkedStack<int> Tempstack;
int mult;
for(int i=0; i<a.length();i++)
{
if(isdigit(a[i])&&isdigit(a[i+1])&&isdigit(a[i+2])&&isdigit(a[i+3]))
{
char chr[4];
chr[0]=a[i];
chr[1]=a[i+1];
chr[2]=a[i+2];
chr[3]=a[i+3];
mult=0;
mult=atoi(chr);
cout<<"mult inside 4 digit"<<mult<<endl;
Tempstack.push(mult);
i=i+3;
}
else if(isdigit(a[i])&&isdigit(a[i+1])&&isdigit(a[i+2]))
{
char chr[3];
chr[0]=a[i];
chr[1]=a[i+1];
chr[2]=a[i+2];
mult=0;
mult=atoi(chr);
cout<<"mult inside 3 digit"<<mult<<endl;
Tempstack.push(mult);
i=i+2;
}
else if(isdigit(a[i])&&isdigit(a[i+1]))
{
char chr[2];
chr[0]=a[i];
chr[1]=a[i+1];
mult=atoi(chr);
cout<<"mult inside 2 digit"<<mult<<endl;
Tempstack.push(mult);
++i;
}
else if(isdigit(a[i])) {//if it is a 1digit number
char chr[1];
chr[0]=a[i];
mult=atoi(chr);
cout<<"mult inside 1 digit"<<mult<<endl;
Tempstack.push(mult);
// switch(a[i]){
// case '1':
// Tempstack.push(1);
// break;
// case '2':
// Tempstack.push(2);
// break;
// case '3':
// Tempstack.push(3);
// break;
// case '4':
// Tempstack.push(4);
// break;
// case '5':
// Tempstack.push(5);
// break;
// case '6':
// Tempstack.push(6);
// break;
// case '7':
// Tempstack.push(7);
// break;
// case '8':
// Tempstack.push(8);
// break;
// case '9':
// Tempstack.push(9);
// break;
// case '0':
// Tempstack.push(0);
// break;
// }
}
else if(a[i]==' ')
{
}
else
{
int c=Tempstack.top();
Tempstack.pop();
int b=Tempstack.top();
Tempstack.pop();
switch(a[i])
{
case '+':
Tempstack.push(b+c);
break;
case '-':
Tempstack.push(b-c);
break;
case '*':
Tempstack.push(b*c);
break;
case '/':
if(c==0) { Tempstack.push(0);}
else {Tempstack.push(b/c);}
}
}
}
return Tempstack.top();
}
Когда я пытаюсь напечатать "18 3 4 * -", у него есть 18, Мой код не имеет его go назад, так почему мой код возвращается. Проблема в том, что если вернуться к 18, не будет ли распечатано «мульт внутри 2 цифр»? Он работает с оператором switch (вот почему я это закомментировал).