C ++:程序将后缀转换为评估

时间:2011-10-23 21:08:00

标签: c++

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

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

向下滚动输出#2正常工作但输出#3没有。一些如何当我将值推回到堆栈中时,当我弹出它时它有+ '43',因为ASCII并且我似乎无法将其变为常规整数值,因此我可以轻松地执行这些操作。

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

convertPostfixToEvaluation的工作原理如下:我滚动浏览后缀的每个索引,直到我读入'='然后输出总数/总和。第一个if语句将操作数(0-9)推入堆栈。第二个if语句,如果它读入运算符,则它尝试在第134-158行中进行操作。在if语句之后,我将索引值增加1,以便它可以扫描整个数组。

问题在于我尝试添加,减去,乘以或除以3个以上操作数的开关。所以第三个我认为仍然有价值(+43因为ASCII)。

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

切入追逐问题。第二次将char转换为int的问题。

1 个答案:

答案 0 :(得分:0)

使用此代码,很多事情很可能错误


查找函数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'”将返回数字字符和字符之间的距离为零。 C和C ++语言保证以下关系:

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

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

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