版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42449444/article/details/89473397
读入两个小于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
浙大机试题。我的想法是先把字符串str根据'+'和'='号来分割成A、B俩个字符串,通过自定义函数str2num(string str)来实现字符串到数字的转换,然后无脑相加A和B即可。至于str2num()函数的实现,可以建立一个map,利用map来将英文单词转换成相应的数字。要是字符串不含空格,就说明这是个位数,直接return这个单词相应的数字即可;要是字符串含有空格,不要慌问题不大,题目说了A和B都小于100,先将字符串分割成俩个单词 再把那俩个单词转换成相应的数字,return(十位数*10+个位数)即可。
#include <bits/stdc++.h>
using namespace std;
int str2num(string str) //将含英文单词的字符串转换成数字
{
map<string,int> m; //利用map来将英文单词转换成相应的数字
m["one"] = 1;
m["two"] = 2;
m["three"] = 3;
m["four"] = 4;
m["five"] = 5;
m["six"] = 6;
m["seven"] = 7;
m["eight"] = 8;
m["nine"] = 9;
if(str.find(' ') == string::npos) //若字符串中没有空格
{
return m[str];
}
else //若字符串中含有空格
{
int pos = str.find(' ');
return 10*m[str.substr(0,pos)] + m[str.substr(pos+1,str.length()-pos-1)];
}
}
int main()
{
string str;
while(getline(cin,str) && str!="zero + zero =") //当A和B同时为0时输入结束
{
int pos1 = str.find('+'); //'+'的所在位置
int pos2 = str.find('='); //'='的所在位置
string A = str.substr(0,pos1-1); //截取字符串A
string B = str.substr(pos1+2,pos2-pos1-3); //截取字符串B
cout << str2num(A) + str2num(B) << endl;
}
return 0;
}