栈实现中锥表达式转后缀表达式,保存并计算
这是我们数据结构的作业,我只会实现那些数是int 型的,不会实现浮点型的,求破!
[解决办法]
楼主的意思我不太明白,再确认一下。你能处理整型的实现,比如3*4+5*(8+2),但是不能实现浮点型,比如3.0*4.5+5.2*(8+2)是不是这个意思?利用c库函数scanf(),会发现处理整形和浮点型的区别不大的。两种情况都分三部骤,第一词法分析就是把键盘输入的表达式分解成一个一个的元素,包括数字和运算符。第二阶段可以采用栈转化中缀为后缀;第三阶段用对后缀表达式求值,这一阶段也需要用到第一阶段的词法分析。第一阶段是处理整型和浮点型的一个区别点。下面是个实现第一阶段的小例子,例子里只打印分割出的元素,楼主可以把分割出的元素进行压栈。
-------------------------
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <ctype.h>
4 int main(int argc, char *argv[]){
5 char c;
6 double element;
7 printf("please input an expression:\n");
8 while(1){
9 while((c=getchar())==' '
[解决办法]
c=='\t');
10 if(c=='\n'
[解决办法]
c==EOF) break;
11 if(c=='.'
[解决办法]
isdigit(c)){
12 ungetc(c,stdin);
13 /*get element:%lf for float ,%d for int*/
14 scanf("%lf",&element);
15 /*can use element for futher operation, here just print it*/
16 printf("%lf\n",element);
17 }
18 else{
19 printf("%c\n",c);
20 }
21 }
22 return 0;
23 }
-----------------------------------------------
运行情况:
please input an expression:
2*(3+4.5)-6.8
2.000000
*
(
3.000000
+
4.500000
)
-
6.800000