我有一个字符串:
((12+41)*30)
此处12
,41
和30
都是字符。我如何对它们进行算术运算?
当我有一个数字20
时,我怎么能得到一个读数为20的字符串?
答案 0 :(得分:2)
关于第一个问题,请阅读reverse polish notation。要将int转换为字符串,请使用sprintf()。
char *string[256];
int n = 100;
sprintf(string, "%d", n);
答案 1 :(得分:2)
关于第一个问题,如果要正确执行此操作,则需要为所需的表达式生成解析器。阅读bison - 实际上section 2.2 of the manual是关于为你在这里提供的表达式编写解析器。
以这种方式获得解析器正在做得很好,虽然我不会声称它特别容易(了解野牛有点令人费解,第一次)。可以手动将解析器组合在一起,但最终需要更长的时间,而不是一点点教育。一旦你知道如何使用像野牛这样的工具,你就可以在各种各样的地方重用这些知识。
答案 2 :(得分:2)
为了计算这样的表达式,你需要创建一个12,+,41,30的树
*
/ \
[+] 30
/ \
12 41
这可以通过将中缀表达式转换为后缀表达式来完成,这样可以设置正确的运算符优先级。然后使用堆栈遍历树来评估表达式。