#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 1000
static int N; //N棧的大小
static int *s;
void STACKinit(int maxN) //建立一個動態數組s,相當于建立并初始化棧
{
s = (int *)malloc(maxN*sizeof(int));
N=0;
}
int STACKempty()
{
return N==0;
}
void STACKpush(int item)
{
s[N++] = item;
}
int STACKpop()
{
return s[--N];
}
int main()
{
char a[M];
gets(a); //輸入后綴表達式,每個整數之后至少要有一個空格
int i,len,ok;
char k[15]={' ','0','1','2','3','4','5','6','7','8','9','+','-','/','*'};
len=strlen(a);
while(1) //檢查輸入字符串的合法性(僅限于檢查輸入是否為包含數字和+ - * / 和 ' '的字符串)
{
ok=0;
for(i=0;i<len;i++)
{
for(int j=0;j<15;j++)
{
if(a[i] == k[j])
{
ok=1;
}
}
if(!ok)
{
printf("Input error! please input again:\n");
break;
}
}
if(!ok)
{
gets(a);
len=strlen(a);
}
else
break;
}
STACKinit(len); //初始化N=0
for(i=0;i<len;i++)
{
if(a[i] == '+')
STACKpush(STACKpop()+STACKpop());
if(a[i] == '*')
STACKpush(STACKpop()*STACKpop());
if(a[i] == '-')
{
b = STACKpop();
c = STACKpop();
STACKpush(c-b);
}
if(a[i] == '/')
{
b = STACKpop();
c = STACKpop();
STACKpush(c/b);
}
if((a[i] >= '0') && (a[i] <= '9')) //如果遇到數字,則先壓入0進棧
STACKpush(0);
while((a[i] >='0') && (a[i] <='9'))
STACKpush(10*STACKpop()+(a[i++]-'0'));//再將“字符數字”轉換為數字
}
printf("%d \n",STACKpop());
return 0;
}
示例:

#include<string.h>
#include<stdlib.h>
#define M 1000
static int N; //N棧的大小
static int *s;
void STACKinit(int maxN) //建立一個動態數組s,相當于建立并初始化棧
{
s = (int *)malloc(maxN*sizeof(int));
N=0;
}
int STACKempty()
{
return N==0;
}
void STACKpush(int item)
{
s[N++] = item;
}
int STACKpop()
{
return s[--N];
}
int main()
{
char a[M];
gets(a); //輸入后綴表達式,每個整數之后至少要有一個空格
int i,len,ok;
char k[15]={' ','0','1','2','3','4','5','6','7','8','9','+','-','/','*'};
len=strlen(a);
while(1) //檢查輸入字符串的合法性(僅限于檢查輸入是否為包含數字和+ - * / 和 ' '的字符串)
{
ok=0;
for(i=0;i<len;i++)
{
for(int j=0;j<15;j++)
{
if(a[i] == k[j])
{
ok=1;
}
}
if(!ok)
{
printf("Input error! please input again:\n");
break;
}
}
if(!ok)
{
gets(a);
len=strlen(a);
}
else
break;
}
STACKinit(len); //初始化N=0
for(i=0;i<len;i++)
{
if(a[i] == '+')
STACKpush(STACKpop()+STACKpop());
if(a[i] == '*')
STACKpush(STACKpop()*STACKpop());
if(a[i] == '-')
{
b = STACKpop();
c = STACKpop();
STACKpush(c-b);
}
if(a[i] == '/')
{
b = STACKpop();
c = STACKpop();
STACKpush(c/b);
}
if((a[i] >= '0') && (a[i] <= '9')) //如果遇到數字,則先壓入0進棧
STACKpush(0);
while((a[i] >='0') && (a[i] <='9'))
STACKpush(10*STACKpop()+(a[i++]-'0'));//再將“字符數字”轉換為數字
}
printf("%d \n",STACKpop());
return 0;
}
示例:
