试题 字符串与表达式 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 编写一个字符串表达式求解函数 int expression(char* s); 输入一个字符串表 达式,返回它的结果。表达式长度不会超过 100。表达式最少有一项,且以等号 =结束。表达式中只包含加法和减法,且运算均在整数范围之内。 编写 main 函数测试该函数的正确性。 输入: 2+2345+913-3= 输出: 3257 分析本题,定义了一个函数,将字符转换为数字,使用了一个do-while循环,进行输入,终止条件为,当输入字符为‘=’,然后是5个for循环,第一个,进行遍历整个字符串,将‘+’和‘-’存入数组x[ ]中,第二个for循环,遍历整个字符串,当没有遇到‘+’或者‘-’时,将数字字符存入二维数组,遇到则进行换行,k++,j=0,使得从下一行的0列开始重新存入数字字符,第三个for循环,进行遍历二维数组的行,将每一行作为一个参数,传入函数,进行转换为数组,存入arr数组,第四个for,进行运算,但是,这里除了第一个和最后一个,其他的数字都进行了重复加,所以最后一个for,将i=1行到k-1行,进行遍历删除重复相加的数。
#include <stdio.h>
#define N 100
int Fun(char *s)
{
int i,n=0;
for(i=0;s[i];i++)
{
n=n*10+s[i]-'0';
}
return n;
}
int main()
{
char str[N],s[N][N],x[N];
int n=-1,j=0,k=0,l=0,arr[N],sum=0,i;
do{
n++;
scanf("%c",&str[n]);
}while(str[n]!='=');
for(i=0;i<n;i++)
{
if (str[i]=='+'||str[i]=='-')
x[l++]=str[i];
}
for(i=0;i<n;i++)
{
if(str[i]>='0'&&str[i]<='9')
{
s[k][j++]=str[i];
}
else
{
k++;
j=0;
}
}
for(i=0;i<=k;i++)
{
arr[i]=Fun(s[i]);
}
for(i=0;i<l;i++)
{
if (x[i]=='+')
{
sum+=arr[i];
sum+=arr[i+1];
}
else
{
sum+=arr[i];
sum-=arr[i+1];
}
}
for(i=1;i<k;i++)
{
sum-=arr[i];
}
printf("%d",sum);
return 0;
}
|