四则运算(含括号)C++
输入一个表达式(用字符串表示),求这个表达式的值。
保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。
数据范围:表达式计算结果和过程中满足 |val| \le 1000 \∣val∣≤1000 ,字符串长度满足 1 \le n \le 1000 \1≤n≤1000
输入描述:
输入一个算术表达式
输出描述:
得到计算结果
示例1
输入:
3+2*{1+2*[-4/(8-6)+7]}
输出:
25
#include<iostream> #include<vector> #include<string> #include<limits.h> using namespace std; int zuo=0, you=0; bool isshu(string s){//判断字符串是否为数字 if (s[0] <= '9' && s[0] >= '0')return true; if (s[0] = '-' && s.size() > 1)return true; return false; } int jisuan(vector<string> x) { //计算没有括号的式子; vector <int> a; string w = ""; int b,c; for (int i = 0; i < x.size(); ++i) { if (x[i] == " ")continue; if (isshu(x[i]))a.push_back(stoi(x[i])); if (x[i] == "*") { while (!isshu(x[i])) { if (x[i] == "-") { c = a.back(); a.pop_back(); a.push_back(INT_MIN); a.push_back(c); } ++i; } b = stoi(x[i]); c = a.back() * b; a.pop_back(); a.push_back(c); } if (x[i] == "/") { while (!isshu(x[i])) { if (x[i] == "-") { c = a.back(); a.pop_back(); a.push_back(INT_MIN); a.push_back(c); } ++i; } b = stoi(x[i]); c = a.back() / b; a.pop_back(); a.push_back(c); } if (x[i] == "-")a.push_back(INT_MIN); } b = 0; for (int i = 0; i < a.size(); ++i) { if (a[i] == INT_MIN) { a[i] = 0; ++i; a[i] = -a[i]; } } for (int i = 0; i < a.size(); ++i) { b += a[i]; } return b; } bool kh(vector<string> x) { //判断是否有括号,如果有,记录第一个完整括号的左右括号位置; for (int i = 0; i < x.size(); ++i) { if (x[i] == "{" || x[i] == "(" || x[i] == "[")zuo = i; else if (x[i] == "}" || x[i] == ")" || x[i] == "]") { you = i; return true; } } return false; } int youkuohao(vector<string> x) { vector<string>b; int aw; while (kh(x)) {//如果有括号,计算括号内式子,并将值代替原括号; b.assign(x.begin() + zuo+1, x.begin() + you); aw = jisuan(b); x[zuo] = to_string(aw); for (int i = zuo + 1; i <= you;++i)x[i] = " "; } aw = jisuan(x); return aw; } int main() { string s,w="",c=""; vector<string>ss;//ss把s里在一起的数字当做一个整数 cin >> s; for (int i = 0; i < s.size(); ++i) { if (s[i] <= '9' && s[i] >= '0') { w += s[i]; } else { if(w!="")ss.push_back(w); w = ""; c += s[i]; ss.push_back(c); c = ""; } } ss.push_back(w); int a = youkuohao(ss); cout << a << endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现