[ACM] hdu 1228 A+B (字符串处理)
生活随笔
收集整理的這篇文章主要介紹了
[ACM] hdu 1228 A+B (字符串处理)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
A + B
Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 11543????Accepted Submission(s): 6699
?
讀入兩個小于100的正整數A和B,計算A+B.須要注意的是:A和B的每一位數字由相應的英文單詞給出.
?
?
測試輸入包括若干測試用例,每一個測試用例占一行,格式為"A + B =",相鄰兩字符串有一個空格間隔.當A和B同一時候為0時輸入結束,對應的結果不要輸出.
?
?
對每一個測試用例輸出1行,即A+B的值.
?
?
one + two = three four + five six = zero seven + eight nine = zero + zero =
?
?
3 90 96
?
?
浙大計算機研究生復試上機考試-2005年?
解題思路:
以加號為界限,左右兩個加數分別存到一個字符串里面,再在每一個字符串中提取出來加數。
代碼:
方法1:使用substr函數,手動推斷空格
#include <iostream> #include <string.h> using namespace std;int change(string str)//字符串轉換成數字 {int d;if(str=="zero")d=0;else if(str=="one")d=1;else if(str=="two")d=2;else if(str=="three")d=3;else if(str=="four")d=4;else if(str=="five")d=5;else if(str=="six")d=6;else if(str=="seven")d=7;else if(str=="eight")d=8;else if(str=="nine")d=9;return d; } int main() {string exp;//輸入的一行string A,B;int a,b;//A,B分別代表加號左,右的數的字符串,a,b分別為兩個加數的值while(getline(cin,exp)){int len=exp.length();int j;int tap1,tap2;for(j=0;j<len;j++){if(exp[j]==' '&&exp[j+1]=='+')tap1=j;//tap1為第一個數右邊的空格if(exp[j]==' '&&exp[j+1]=='=')tap2=j;//tap2為第二個數右邊的空格}A=exp.substr(0,tap1);//提取,開始位置為0,提取長度為tap1B=exp.substr(tap1+3,tap2-tap1-3);int lenA=A.length();int lenB=B.length();a=b=0;int pre=-1;for(int i=0;i<lenA;i++){if(A[i]==' '){a=a*10+change(A.substr(pre+1,i-pre-1));pre=i;}if(i==lenA-1)//和空格的情況不太一樣,要多讀取一位a=a*10+change(A.substr(pre+1,i-pre));}pre=-1;for(int i=0;i<lenB;i++){if(B[i]==' '){b=b*10+change(B.substr(pre+1,i-pre-1));pre=i;}if(i==lenB-1)b=b*10+change(B.substr(pre+1,i-pre));}if(a==0&&b==0)break;cout<<a+b<<endl;}return 0; }方法2,3:(輸入時,自己主動忽略空格,把每一個單詞放入到一個字符數組中)
代碼1:
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; char s[100][100];int change(char str[]) {int d;if(str[0]=='z')//不能str=="zero"d=0;else if(str[0]=='o')d=1;else if(str[0]=='t'&&str[1]=='w')d=2;else if(str[0]=='t'&&str[1]=='h')d=3;else if(str[0]=='f'&&str[1]=='o')d=4;else if(str[0]=='f'&&str[1]=='i')d=5;else if(str[0]=='s'&&str[1]=='i')d=6;else if(str[0]=='s'&&str[1]=='e')d=7;else if(str[0]=='e')d=8;else if(str[0]=='n')d=9;return d; } int main() {int a,b;int c = 0;while(~scanf("%s", s[c])){//先輸入第一個單詞c = 1;char ch;while(scanf("%s%c",s[c], &ch)){//以空格為界限。讀入每一個單詞,字符數組不讀空格if(ch == '\n')//退出條件break;c++;}int ok=0;a=b=0;for(int i=0;i<c;i++){if(s[i][0]=='+'){ok=1;continue;}if(ok==0)a=a*10+change(s[i]);else if(ok==1)b=b*10+change(s[i]);}if(a==0&&b==0)break;cout<<a+b<<endl;c = 0;}return 0; }
代碼2:
?
轉載于:https://www.cnblogs.com/jzdwajue/p/7261333.html
總結
以上是生活随笔為你收集整理的[ACM] hdu 1228 A+B (字符串处理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: grep与正则表达式基础
- 下一篇: 关于Unity中Mecanim动画的动画