A+ B

题目描述

读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出.

输入描述:

测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.

输出描述:

对每个测试用例输出1行,即A+B的值.

示例1

输入

one + two =
three four + five six =
zero seven + eight nine =
zero + zero =

分析

  1. 使用map,用于查找单词相对应的数字
    2.<string>类的substr的用法
int i = s.find(c)// 返回值为字符串中第一个出现字符c的位置,如果不存在则返回```npos```(结尾)
string s1 = s.substr(index);// 返回值为从s[index] 到 结尾的字符串
string s1 = s.substr(index, length); // 返回值为从index开始,长度为length的字符串
#include <iostream>
#include <string>
#include <map>

using namespace std;

int main(){
    map<string, int> mp;
    mp["zero"] = 0;
    mp["one"] = 1;
    mp["two"] = 2;
    mp["three"] = 3;
    mp["four"] = 4;
    mp["five"] = 5;
    mp["six"] = 6;
    mp["seven"] = 7;
    mp["eight"] = 8;
    mp["nine"] = 9;
    string s;
    while(getline(cin, s)) {
        int x, y;
        int plus = s.find('+');
        int equal = s.find('=');
        
        string s1 = s.substr(0, plus - 1);
        string s2 = s.substr(plus + 2, equal - plus - 3);

        if(s1.find(' ') == string::npos)
            x = mp[s1];
        else{
            int pos = s1.find(' ');
            string shiwei = s1.substr(0, pos);
            string gewei = s1.substr(pos + 1);
            x = mp[shiwei] * 10 + mp[gewei];
        }


        if(s2.find(' ') == string::npos)
            y = mp[s2];
        else{
            int pos = s2.find(' ');
            string shiwei = s2.substr(0, pos);
            string gewei = s2.substr(pos + 1);
            y = mp[shiwei] * 10 + mp[gewei];
        }

        if(x + y == 0) break;
        else cout << x + y << endl;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zhuobo/p/10262697.html
B
a^b
A/B
A*B