Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:将后缀转换为求值的程序_C++ - Fatal编程技术网

C++ C++;:将后缀转换为求值的程序

C++ C++;:将后缀转换为求值的程序,c++,C++,如何将数组中的字符转换为整数 忽略第5-100行,这只是我的堆栈。 向下滚动输出#2正常工作,但输出#3不正常。当我把这个值推回到堆栈中,当我弹出它时,由于ASCII,它的值是+'43',我似乎无法将它转换成一个常规的整数值,所以我可以轻松地进行这些操作 第116行将输入放入字符后缀。注意:输入必须是后缀符号,在函数运行后,第117行将单个整数值放入final convertPostfixToEvaluation的工作原理如下:我滚动每个后缀索引,直到读入“=”,然后输出总数/总和。第一条if

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

忽略第5-100行,这只是我的堆栈。

向下滚动输出#2正常工作,但输出#3不正常。当我把这个值推回到堆栈中,当我弹出它时,由于ASCII,它的值是+'43',我似乎无法将它转换成一个常规的整数值,所以我可以轻松地进行这些操作

第116行将输入放入字符后缀。注意:输入必须是后缀符号,在函数运行后,第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”将返回数字字符与零字符之间的距离。C语言和C++语言保证了以下关系:

'0' < '1' < '2' < '3' < '4' < '5' < '6' < '7' < '8' < '9'
'0'<'1'<'2'<'3'<'4'<'5'<'6'<'7'<'8'<'9'
这些语言还声明这些数字是连续的


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

+1感谢您的实际尝试;你还有东西要学!我不确定你是使用IdeOne和CodePad来实现这个目的,还是你实际上没有安装编译器?我建议你去安装一个(VC++快件或GNU C++编译器是免费的)。此外,还需要重新设计。在将操作数推送到
堆栈类型上之前,需要将数字解析为整数。字符不是操作数,所以不要推送它们。除非你让你的类为你的问题建模,否则软件将不可避免地变得困难。你能解释一下“std::string::npos”在做什么吗。我做了我的_操作符。查找(后缀[I])!=我的_operators.npos和它确实挑选了运营商,但我不知道它是如何做到的。我在cplusplus()上检查了npc,但我不太明白that@Chris:
string::find
方法返回找到的字符的位置,如果未找到,则返回
std::string::npos