本题主要考察字符串的操作。思路是使用substr来截取数字对应的字符串。
比如
one + two =
three four + five six =
情况1:通过对str.find("+")来获取加号的位置,再配合size来截取可分别把one、two分别截取出来赋给front,rear。再根据数组对应得到数字即可。此为字符串长度小于6的情况即只有一个数字。
情况2:有两个数字。那么截取到的是"three four",由于题目限制了小于100,那么只需要再通过对“ ”的发现位置然后配合size再进行一次截取,即可获得两个单独的数字。
#include <iostream>
#include <string>
using namespace std;
string num[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int StringToInt(string str){ //通过数组映射字符串对应的数字
for(int i=0;i<10;i++){
if(str==num[i])
return i;
}
return 0;
}
int Trans(string str){ // 将该操作整合成函数,避免函数冗余
int empty = str.find(' ');
int size = str.size();
return StringToInt(str.substr(0,empty))*10 + StringToInt(str.substr(empty+1,size-empty-1));
}
int main(){
string str;
while(getline(cin,str)){
int plus = str.find("+"); //寻找加号
int size = str.size();
string front = str.substr(0,plus-1); //对前后的截取,如果不好找,可以边打印出来边修改
string rear = str.substr(plus+2,size-plus-4);
int left,right;
if(front.size()<6){
left = StringToInt(front);
}else{
left = Trans(front);
}
if(rear.size()<6){
right = StringToInt(rear);
}else{
right = Trans(rear);
}
int ans = left+right;
if(ans==0)break; //0则退出
else //否则打印
cout << ans <<endl;
}
return 0;
}