资源限制
时间限制:1.0s 内存限制:256.0MB
编写一个字符串表达式求解函数int expression(char* s); 输入一个字符串表达式,返回它的结果。表达式长度不会超过100。表达式最少有一项,且以等号=结束。表达式中只包含加法和减法,且运算均在整数范围之内。
编写main函数测试该函数的正确性。
输入:
2+2345+913-3=
输出:
3257
#include<iostream>
#include<string>
#include <stdlib.h>//atoi函数的头文件
using namespace std;
string s;
string a = "";
int b =0,flag=1,i;//这里i我定义成全局变量,可以一定程度减少循环次数
int sum = 0;
int transform(int k){//这个for循环是用来求 加减号后面的数字的;
int num;
for (int i=k; i < s.length(); i++) {
if (s[i] != '+' && s[i] != '-'&&s[i]!='='){//判断如果是数字就记录下来
a = a + s[i];
}
else{
num = atoi(a.c_str());//atoi是string转化为int类型的一个函数
return num;
}
}
}
int main() {
cin >> s;
for (i = 0; i < s.length(); i++) {
if (s[i] != '+' && s[i] != '-'&&flag==1){//flag的作用是把第一个数字直接存到sum,以后就不在运行。
a = a + s[i];
}
if(flag&&(s[i] == '+' || s[i] == '-')){//flag的作用是把第一个数字直接存到sum,以后就不在运行。
sum=atoi(a.c_str());
flag=0;
a="";
}
if (s[i] == '+') {//判断符号
b = transform(i+1);//把符号后面的数字转为int并赋给b
sum += b;
a="";
}
if (s[i] == '-') {//判断符号
b = transform(i+1);//把符号后面的数字转为int并赋给b
sum -= b;
a="";
}
if (s[i] == '=') {//如果为等于号就输出
cout << sum << endl;
}
}
return 0;
}
算法思想:
比如这个算式:2+2345+913-3=
先把2赋值给sum,for循环判断符号,在调用函数把1235赋值给b,用sum+b赋值给sum,以此类推。。。直到s[i]等于等于号,结束。