蓝桥杯练习系统(算法训练)ALGO-975 P0802字符串表达式

资源限制

**内存限制:**256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

  编写一个字符串表达式求解函数int expression(char* s); 输入一个字符串表达式,返回它的结果。表达式长度不会超过100。表达式最少有一项,且以等号=结束。表达式中只包含加法和减法,且运算均在整数范围之内。

  编写main函数测试该函数的正确性。

输入:

  2+2345+913-3=

输出:

  3257

cpp 复制代码
#include<iostream>
#include<string>
#include<stack> 
using namespace std;
stack<int> num;//操作数栈
stack<char> op;//运算符栈
void operate(){
	int b=num.top();//右操作数
	num.pop();
	int a=num.top();//左操作数
	num.pop();
	if(op.top()=='+') num.push(a+b);
	if(op.top()=='-') num.push(a-b);
	op.pop();
}
int main(){
	string s;
	cin>>s;
	for(int i=0;i<s.length()-1;i++){//最后一个是"=" 
		if(s[i]>='0'&&s[i]<='9'){//操作数(可能不是个位数,比如12) 
			int j=i;
			int x=0;//操作数
			while(j<s.length()-1&&s[j]>='0'&&s[j]<='9'){
				x=x*10+s[j++]-'0';
			} 
			num.push(x);
			i=j-1;//i指向整个操作数的个位数 
		}else{//运算符 
			if(op.empty()) op.push(s[i]);
			else{
				operate();
				op.push(s[i]);
			} 
		} 
	}
	//剩余
	while(op.size()) operate();
	cout<<num.top()<<endl;
	return 0;
}

思路:中缀表达式的计算。 比中缀表达式求值简单。

相关推荐
Dream it possible!1 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊2 小时前
算法之双指针系列(一)
算法·leetcode
十二2 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
小此方3 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划
Pniubi3 小时前
力扣560.和为k的子数组
算法·leetcode·职场和发展
D e re k ZH4 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
Pniubi4 小时前
力扣438.找到字符串中所有字母异位词
算法·leetcode·职场和发展
東隅已逝,桑榆非晚7 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
Eyfcom7 小时前
〖物联网终端实战 01〗UWB 室内高精度定位:仓储 AGV 与人员的厘米级轨迹追踪
物联网·算法·物流系统·快递系统·跨境物流快递系统·物联网终端实战
bro_Java6668 小时前
《排序的底层逻辑:比较、交换与分治》
java·算法·排序算法