将后缀转换为求值的程序

C++: Program converting postfix to evaluation

本文关键字:程序 后缀 转换      更新时间:2023-10-16

如何将数组中的字符转换为整数?

忽略5-100行,它只是我的堆栈。http://ideone.com/KQytD

向下滚动输出#2工作正常,但输出#3没有。不知怎么的,当我把值推回堆栈时,当我弹出它时,因为ASCII,它有+'43',我似乎不能把它变成一个常规的整数值,所以我可以很容易地做这些操作。

第116行将输入放入char后缀中。注:输入必须采用后缀表示法,第117行在运行完函数后将单个整数值放入final。

convertPostfixToEvaluation是这样工作的:我滚动每个后缀索引,直到我读到'=',然后输出总数/总和。第一个if语句将操作数(0-9)压入堆栈。第二个if语句如果读入一个操作符,那么它将尝试执行第134-158行中的操作。在if语句之后,我将索引值增加1,以便它可以扫描整个数组。

问题在于我尝试加、减、乘或除超过3个操作数的开关。所以我相信第三个仍然有值(+43,因为ASCII)。

我的输出(在我的程序底部)显示了尴尬是什么。

开门见山。第二次将char转换为int的问题

这段代码有很多地方很可能是错误的


查找函数isdigit。这将消除巨大的if语句。

您可能希望使用字符串查找而不是其他复杂的if语句:

const std::string my_operators = "+-/*";
if (my_operators.find(postfix[i]) != std::string::npos)
{
    // Enter here if the character is a valid symbol.
}

如果你逐个字符"解析",你将不得不建立你的数字:

int number = 0;
// After detecting the character is a number:
number = number * 10 + (postfix[i] - '0');

表达式"postfix[i] - '0'"将返回数字字符与表示0的字符之间的距离。C和c++语言保证了以下关系:

'0' < '1' < '2' < '3' < '4' < '5' < '6' < '7' < '8' < '9'

语言还声明这些数字是连续的。

建议:使用std::string代替字符数组。std::string包含一些有用的函数,用于搜索、跳过字符和获取子字符串。