题目描述:

读入两个小于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+个位数)即可。

AC代码:

#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;
}