92 表达式求值
作者: 朱星垠 时间限制: 1S章节: 字符串
问题描述 :
以字符串形式输入仅有整数和加减(正负)号构成的表达式,输出该表达式的值。
输入说明 :
标准输入设备中有多组测试数据,每组输入数据由一行组成,输入仅有整数和加减(正负)号构成的表达式(但是表达式可以插入空格)。
输出说明 :
依次输出从标准输入设备中读入的每一组测试数据对应的结果,输出一行,输出该表达式的值。所有数据前后没有多余的空格,两组数据之间也没有多余的空行。
输入范例 :
3+ 4+ 5+6
0+1
输出范例 :
18
1
解答思路:
简单的状态机。注意不要被范例迷惑,考虑两位数、三位数等。
AC代码
#include <cstdio>
#include <cstring>
int main(){
char a[100];
while(gets(a))
{
int sum=0,tag=0;
for(int i=0;i<strlen(a);i++)
{
if(a[i]>='0'&&a[i]<='9')
{
int temp=0;
int j=i;
for(j;;j++)
{
if(a[j]>'9'||a[j]<'0')
{
break;
}
temp*=10;
temp+=(a[j]-'0');
}
i=j-1;
switch (tag)
{
case 0:
sum+=temp;
break;
case 1:
sum+=temp;
break;
case -1:
sum-=temp;
break;
}
}
if(a[i]=='+')
{
tag=1;
}
if(a[i]=='-')
{
tag=-1;
}
}
printf("%d\n",sum);
}
}