您的位置:

c语言逆波兰表示法,逆波兰表达式c++实现

本文目录一览:

C语言 逆波兰表达式 算法

#include stdio.h

#include string.h

int main()

{

double d[100], *dp = d;

int m, k;

char t[50], *tp = t;

char s[100], *c = s;

char* op = "+-*/";

char* fg = "0123456789.";

gets(s);

while(*c) {

if(strchr(op, *c)) {

*tp++ = *c;

k = 0;

}else

if(strchr(fg, *c)) {

sscanf(c, "%lf%n", dp++, m);

c += m - 1;

++k;

}

++c;

while((dp - d 1 k == 2) || !*c dp - d = 1) {

switch(*--tp) {

case '+': dp[-2] = dp[-2] + dp[-1]; break;

case '-': dp[-2] = dp[-2] - dp[-1]; break;

case '*': dp[-2] = dp[-2] * dp[-1]; break;

case '/': dp[-2] = dp[-2] / dp[-1]; break;

}

--dp;

}

}

printf("%f", *dp);

}

C语言逆波兰算数表达式

我用c语言写的wintc下运行正确 希望对你有帮助

#includestdio.h

#includestring.h

int nibolan(char s[])

{ int i=0,a,b;

char *p;

p=s ;

while(*p!='\0')

{if(*p=='+'){*p=((*(p-2)-48)+(*(p-1)-48))+48;}

if(*p=='-'){*p=((*(p-2)-48)-(*(p-1)-48))+48;}

if(*p=='*'){*p=((*(p-2)-48)*(*(p-1)-48))+48;}

if(*p=='/'){*p=((*(p-2)-48)/(*(p-1)-48))+48;}

p++;

} p--;

return (*p)-48;

}

main()

{ int r;

char a[100];

gets(a);

r=nibolan(a);

printf("%d",r);

getch();

}

C语言求解逆波兰表达式

使用栈完成

int add(char s[])

{

int st[100];

char *p;

int top=-1;

int A,B,sum=0;

for(p=s;*p!=0;p++)//进行数值计算

{

switch (*p)

{

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':st[++top]=*p-'0';break;//是数字压入总栈st中

case '+':

case '-':

case '*':

case '/'://是运算符号

A=st[top--];

B=st[top--];//弹出2个数字

switch (*p)

{

case '+':sum=B+A;break;

case '-':sum=B-A;break;

case '*':sum=B*A;break;

case '/': sum=B/A;break;

}

st[++top]=sum;//将结果重新压入栈

break;

}

}

return sum;

}