还是A+B
时间限制:1000 ms | 内存限制:65535 KB
难度:1
- 描述
-
输入两个小于100的正整数A和B,输出A+B;A,B均为每位数字对应的英文字母,结果为十进制数。
- 输入
- A,B。
- 输出
- A+B;
- 样例输入
-
one + two = one + two zero =
- 样例输出
-
3 21
- 上传者
- TC_常红立
思路:
首先因为不知道总共有多少个字符串,所以我们不能用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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-08 13:53:20