【发布时间】:2015-06-21 23:03:42
【问题描述】:
我需要创建一个计算器,为此我必须将 operands (numbers) 和 operators (+Sum, *Mult, -Sub, ^Expo) 分隔在不同的堆栈/列表上
我需要将它们中的每一个保存在一个堆栈中(这是一个列表)。
我不能做的是,我应该如何将字符 "+" 转换为 double 然后将其从 double 恢复为 character ?或者有更简单的方法吗?我试图打印这个:
char c = "+";
double d = c; //Now d = -23.00
printf("Plus: %c\n", d); //Prints an unknown character "?".
我怎样才能到达我需要的地方?
【问题讨论】:
-
使用一堆标记的联合,而不是把一个字符硬塞进一个双重!
-
char c = "+";是非法的;你的意思是char c = '+';。假设你解决了这个问题,double d = c;应该将d设置为43,'+'字符的 ASCII 码。您不能使用%c打印double值;你充其量只会得到垃圾。 -
典型的基于堆栈的计算器不会将运算符压入堆栈。在读取操作符时,它将从堆栈中弹出操作数,应用操作并推送结果。为什么要将运算符压入堆栈?完成此操作后,您将如何将运算符与其操作数关联起来?
-
不是重复的,但可以得到一些想法here
-
@PlayHardGoPro 类似
struct stackme{int type; union{double value;char op;};};或者只是删除联合,无论如何它不会节省太多。或者更好的是,如果可以的话,按照@KeithThompson 所说的去做。