标签:
one + two = one + two zero =
3 21
思路:
首先因为不知道总共有多少个字符串,所以我们不能用scanf(“%s”,&a)来输入,而我们应该用gets(a)来进行输入,然后我们可以通过空格来将他们再次分割开,并且在整个过程中,我们要判断是加法运算还是减法运算,然后分过之后,我们通过一个字符串数组将分割开的字符串转化成数字存到a2数组里面,然后再用循环将需要运算的两个数计算出来就OK了!
代码:
#include <stdio.h>
#include <string.h>
char str[10][10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int main()
{
int a,b;
char c[50],a1[10][20],d;
int a2[10];
int u1,u2;
while(gets(c))//因为字符串的个数没有雨确定,所以先用一个大一点的字符串将所有的字符串都保留下来
{
memset(a2,0,sizeof(a2));//记住清零
int len=strlen(c);
int t=0;//t用来保存每个字符串中字符的下标
int e=0;//e用来保存字符串的个数 (从0开始,也就是每个字符串的下标)
int flag=0;//flag用来保存是加法运算还是减法运算还是还没有出现运算符号的
int k=0;//k用来保存加号或减号的前一个字符串的下标!
for(int i=0;i<len;i++)//遍历所有的字符
{
if(c[i]!=' '&&c[i]!='='&&c[i]!='+'&&c[i]!='-')//将每个字符串通过空格分开
{
a1[e][t++]=c[i];
}
else if(c[i]==' ')//如果是空格说明这个字符串已经结束
{
a1[e][t]='\0';
if(c[i-1]>='a'&&c[i-1]<='z')//如果空格前面是字母说明,要将下一个字符串的下标计算出来
{
e++;
t=0;//并将字符串的首字母位置变成0;
}
}
if((c[i]=='+'||c[i]=='-')&&flag==0)//判断第一个数字是否结束
{
k=e-1;//保存第一个数字的描述包含几个字符串(从0开始数)
if(c[i]=='+')//加号用1表示
flag=1;
else//减号用2表示
flag=2;
}
}//以上循环是将各个字符串通过空格分开的过程
for(int i=0;i<e;i++)//这个循环是将字符串转化为数字的过程
{
for(int j=0;j<10;j++)//每次都与这10个字符串进行比较,得出对应的数字
{
if(strcmp(a1[i],str[j])==0)
{
a2[i]=j;
}
}
}
u1=u2=0;
int i;
for(i=0;i<=k;i++)//计算第一个数字
{
u1=u1*10+a2[i];
}
for(;i<e;i++)//计算第二个数字
{
u2=u2*10+a2[i];
}
if(flag==1)//加法
{
printf("%d\n",u1+u2);
}
else//减法
{
printf("%d\n",u1-u2);
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/dxx_111/article/details/48103097