题解报告:hdu 1228 A+B(字符串)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1228

Problem Description
读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出.
Input
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出. 
Output
对每个测试用例输出1行,即A+B的值.
Sample Input
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =
Sample Output
3 90 96

题解思路:这道题本来想用gets函数,循环读进来的字符串,把每一个单词存到二维数组里面,再与已存在的二维数组进行比较。但看了别人的题解后才发现忘了scanf有这个功能即遇到空格、换行、回车、水平制表符、换页符、垂直制表符就会停止读取(这里用到的是空格的功能),不仅效率高,而且思路清晰,代码简洁。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char t[10][10]={"zero","one","two","three","four","five","six","seven","eight","nine"};//先用二维数组保存对应的数字
 4 int fd(char str[])//查找字符串
 5 {
 6     int i;
 7     for(i=0;i<10;i++)
 8         if(!strcmp(t[i],str))break;
 9     return i;//返回该字符串对应的数字
10 }
11 int main()
12 {
13 
14     char c[10];
15     int a,b;
16     while(1){
17         a=b=0;
18         while(scanf("%s",c)&&strcmp(c,"+"))a=a*10+fd(c);//遇到'+'就会结束当前循环
19         while(scanf("%s",c)&&strcmp(c,"="))b=b*10+fd(c);//遇到'='就会结束当前循环
20         if(a==0&&b==0)break;//题目要求当A、B都为0时停止输入
21         else cout<<(a+b)<<endl;//直接计算输出结果
22     }
23     return 0;
24 }
原文地址:https://www.cnblogs.com/acgoto/p/8468576.html