资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
编写一个字符串表达式求解函数int expression(char* s); 输入一个字符串表达式,返回它的结果。表达式长度不会超过100。表达式最少有一项,且以等号=结束。表达式中只包含加法和减法,且运算均在整数范围之内。
编写main函数测试该函数的正确性。
输入:
2+2345+913-3=
输出:
3257
#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;
}
思路:中缀表达式的计算。 比中缀表达式求值简单。