string的操作

题目描述

读入两个小于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 =

输出

复制
3
90

96

#include<iostream>//有一些题目看似很简单,但是在输入的时候需要用到字符串处理的函数,将操作数分离开,通常情况下如果不是
#include<map>//数,是很多不同的属性可以用struct。
#include<string.h>
using namespace std;
map<string,int>mp;
void init()
{
    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;

}
int main()
{
    string num1,num2;
    string s;

    init();
    while(getline(cin,s))
    {
        int x,y;
        int pos1=s.find('+');    //find函数可以有两个参数,第二个参数可以是查找某个字符的开始位置。
        int pos2=s.find('=');
        string str1=s.substr(0,pos1-1);   //从一个字符串中分割一个子串,第一参数含义是开始的下标,第二个参数是子串的长度!!!
        string str2=s.substr(pos1+2,pos2-pos1-3);
        if(str1.find(' ')==string::npos)
            x=mp[str1];
        else
        {
            int pos3=str1.find(' ');
            string s1=str1.substr(0,pos3);
            string s2=str1.substr(pos3+1);
            x=mp[s1]*10+mp[s2];//不会超过100
        }
        if(str2.find(' ')==string::npos)
            y=mp[str2];
        else
        {
            int pos3=str2.find(' ');
            string s1=str2.substr(0,pos3);
            string s2=str2.substr(pos3+1);
            y=mp[s1]*10+mp[s2];//不会超过100
        }
        if(x+y==0)cout<<"0";break;
        else cout<<x+y<<endl;

}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值