给定一个字符串表达式s,计算其值(使用string和stack实现)
来源:互联网 发布:疾病自测软件 编辑:程序博客网 时间:2024/04/30 22:30
<span style="font-size:18px;">toPosfix函数将中缀表达式转换为后缀表达式,calculatePosfix函数计算后缀表达式的值。#include <iostream>#include <stack>#include <string>using std::string;using std::stack;using std::cout;using std::cin;using std::endl;string &toPosfix(string &s, string &format){//中缀表达式转后缀表达式,并且可以计算小数stack<char> sta;string numbers{ "0123456789." };string signl{ "+-" };string signh{ "*/" };string numbe;//判断某数是否为多位数bool flag = false;for (const char &ch : s){if (ch == ' ') continue;//判断这是几位数if (numbers.find(ch) != string::npos){flag = true;numbe.push_back(ch);continue;}else if (flag){flag = false;format.insert(format.end(), numbe.begin(), numbe.end());numbe.clear();format.push_back(' ');}//判断ch什么符号if (ch == '(') sta.push(ch);else if (signl.find(ch) != string::npos){//如果进栈的是“+-”运算符while (!sta.empty() && sta.top() != '('){format.push_back(sta.top());format.push_back(' ');sta.pop();}sta.push(ch);}else if (signh.find(ch) != string::npos){while (!sta.empty() && sta.top() != '('&&signh.find(sta.top()) != string::npos){format.push_back(sta.top());format.push_back(' ');sta.pop();}sta.push(ch);}else if (ch == ')'){//ch==')'while (!sta.empty() && sta.top() != '('){format.push_back(sta.top());format.push_back(' ');sta.pop();}sta.pop();}}if (!numbe.empty()){format.insert(format.end(), numbe.begin(), numbe.end());numbe.clear();format.push_back(' ');}while (!sta.empty()){format.push_back(sta.top());format.push_back(' ');sta.pop();}return format;}double calculatePosfix(string &s){stack<double> sta;double sum = 0;string numbers{ "0123456789." };string sign{ "+-*/" };string numbe;double num1, num2;for (const char &ch : s){if (ch == ' '&&!numbe.empty()){double digit = stod(numbe);sta.push(digit);numbe.clear();}if (numbers.find(ch) != string::npos)numbe.push_back(ch);else if (sign.find(ch) != string::npos){num2 = sta.top(), sta.pop();num1 = sta.top(), sta.pop();double ans = 0;switch (ch){case '+':ans += num1 + num2;break;case '-':ans += num1 - num2;break;case '*':ans += num1*num2;break;case '/':ans += num1 / num2;break;}sta.push(ans);}}while (!sta.empty()){sum += sta.top();sta.pop();}return sum;}double calculateinfix(string &s){string format;toPosfix(s, format);return calculatePosfix(format);}int main(){string s{ "9.8*2+3-(2*3-6+5)" };cout << calculateinfix(s) << endl;cout << 9.8 * 2 + 3 - (2 * 3 - 6 + 5) << endl;return 0;}</span>
1 0
- 给定一个字符串表达式s,计算其值(使用string和stack实现)
- 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的
- 原串翻转 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串
- 给定一个字符串s,请计算输出含有连续两个s作为子串的最短字符串。
- 现有字符串形式的算术表达式,求计算其值。
- 给定一个字符串s和一个非空字符串p,找出s中所有p的字符串的起始索引。
- 给定一个字符串,求出其最长的子字符串
- 给定一个表示分数加减表达式的字符串,需要以字符串格式返回计算结果。结果表达式也是分数式
- 用数组创建一个栈(stack),并利用栈来计算后缀表达式的值
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代
- 计算后缀表达式的值:JAVA-Stack实现
- javascript 计算一个字符串表达式的值
- 给定一个字符串,问是否能通过添加一个字母将其变为回文串。js实现
- 给定一个字符串,求出其最长的重复子串
- 给定一个字符串,求出其最长的重复子串。
- 给定一个字符串,求出其最长的重复子串。
- 给定一个字符串,输出其所有的可能排列
- 给定一个字符串输出其全部排列的方法
- 嵌套类小结
- 用CSS设置当鼠标移动到图片内时显示文字
- php从服务器上下载&保存一个远程图片
- OPN/SPN/PLMN的区别
- CPHS介绍
- 给定一个字符串表达式s,计算其值(使用string和stack实现)
- C语言字节对齐
- 世界建立的两种思路,互补
- 2015应届毕业生北京户口解决办理流程
- php创建数据URL
- 耐心
- [51]跑马灯
- 在R中使用XGBoost算法
- 关于ADS8361量程