博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中缀表达式转后缀表达式,以及计算结果.
阅读量:5064 次
发布时间:2019-06-12

本文共 2863 字,大约阅读时间需要 9 分钟。

//输入的时候加不加空格都行,因为是前缀表达式.//但是输出中应该要加空格,因为有可能几个数字是挨在一起的情况.//has not complete the `to_prifix`, because i do not know how to do it.#include 
#include
#include
#include
using namespace std;class Compute{public: Compute(string infix_); int Cal(); string Prefix() { return prefix; } string Postfix() { return postfix; }private: string prefix; string infix; string postfix;private: void to_postfix(); int cal(int n1, int n2, char c); int compare_priory(char x, char y);};Compute::Compute(string infix_) : infix(infix_){ to_postfix();}int Compute::cal(int n1, int n2, char c){ switch (c){ case '+': return n1 + n2; case '-': return n1 - n2; case '*': return n1 * n2; case '/': return n1 / n2; }}int Compute::compare_priory(char x, char y){ if (x == '*' || x == '/') return 1; else if ((x == '+' || x == '-') && (y == '+' || y == '-')) return 1; else return 0;}void Compute::to_postfix(){ stack
optr; int len = infix.length(); int i; for (i = 0; i < len; i++){ if (infix[i] == ' ') { continue; } else if (isdigit(infix[i])){ if (i > 0 && (!isdigit(infix[i-1]))){ postfix.push_back(' '); postfix.push_back(infix[i]); }else postfix.push_back(infix[i]); } else { if (optr.empty() || compare_priory(infix[i], optr.top())){ optr.push(infix[i]); }else { while (!optr.empty() && compare_priory(optr.top(), infix[i])){ postfix.push_back(' '); postfix.push_back(optr.top()); postfix.push_back(' '); optr.pop(); } optr.push(infix[i]); } } } while (!optr.empty()){ postfix.push_back(' '); postfix.push_back(optr.top()); postfix.push_back(' '); optr.pop(); } if (postfix.back() == ' ') postfix.pop_back();}int Compute::Cal(){ int len = postfix.length(); if (len == 0) return 0; stack
s; int i; int nu = 0; for (i = 0; i < len; i ++){ nu = 0; if (postfix[i] == ' ') continue; else if (isdigit(postfix[i])){ if (i > 0 && isdigit(postfix[i-1]) && !s.empty()){ nu = s.top(); nu = nu * 10 + postfix[i] - '0'; s.pop(); s.push(nu); }else s.push(postfix[i] - '0'); }else{ int n1 = s.top(); s.pop(); int n2 = s.top(); s.pop(); s.push(cal(n2, n1, postfix[i])); } } return s.top();} int main(){ Compute c("12 * 3 + 24 * 35 / 5 - 46"); cout << c.Postfix() << endl; cout << "the result is " << c.Cal() << endl; return 0;}
posted on
2015-08-13 16:39 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/shamoof/p/4727729.html

你可能感兴趣的文章
如何获取Android系统时间是24小时制还是12小时制
查看>>
fur168.com 改成5917电影
查看>>
PHP上传RAR压缩包并解压目录
查看>>
codeforces global round 1题解搬运
查看>>
python os模块
查看>>
Codeforces 719B Anatoly and Cockroaches
查看>>
jenkins常用插件汇总
查看>>
c# 泛型+反射
查看>>
第九章 前后查找
查看>>
Python学习资料
查看>>
多服务器操作利器 - Polysh
查看>>
[LeetCode] Candy
查看>>
Jmeter学习系列----3 配置元件之计数器
查看>>
jQuery 自定义函数
查看>>
jq 杂
查看>>
jquery datagrid 后台获取datatable处理成正确的json字符串
查看>>
作业一
查看>>
AJAX
查看>>
ActiveMQ与spring整合
查看>>
web服务器
查看>>