将后缀转换为求值的程序
C++: Program converting postfix to evaluation
如何将数组中的字符转换为整数?
忽略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
包含一些有用的函数,用于搜索、跳过字符和获取子字符串。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 增量运算符与后缀混淆
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么 C++ 程序员更喜欢前缀 ++,而 Java 程序员更喜欢后缀 ++?
- 中缀到后缀程序
- 中缀到后缀转换器 + 评估程序正确打印到控制台,但不正确地打印到文本文件
- 将后缀转换为求值的程序