拼音翻译成阿拉伯数字

输入一串拼音,输出它代表的阿拉伯数字(Ling,Yi,Er,San,Si,Wu,Liu,Qi,Ba,Jiu),数字不会超过十万

为了处理方便,输入一定是数字带单位的,例如10会是YiShi,而不是一个单独的Shi.


输入 JiuWanJiuQianJiuBaiJiuShiJiu
输出 99999


基本思路:把Wan,Qian,Bai,Shi特殊处理,作为分隔符,其余的都是普通数字


#include<stdio.h>
#include<string>
#include<cctype>
#include<map>
#include<iostream>
#include<vector>
using namespace std;
map<string,int>mm;
vector<int>vec;
vector<int>nums;
void init()
{
    mm["Ling"]=0;
    mm["Yi"]=1;
    mm["Er"]=2;
    mm["San"]=3;
    mm["Si"]=4;
    mm["Wu"]=5;
    mm["Liu"]=6;
    mm["Qi"]=7;
    mm["Ba"]=8;
    mm["Jiu"]=9;
    mm["Wan"]=10000;
    mm["Qian"]=1000;
    mm["Bai"]=100;
    mm["Shi"]=10;
}
int main(int argc, char *argv[])
{
    freopen("test.in","r",stdin);
    init();
    string s;
    while(cin>>s){
        nums.clear();
        vec.clear();
        int i=0;
        int j;
        while(1){
            if(i<s.size()&&isupper(s[i]))
            {
                j=i;
                i++;
                while(i<s.size()&&islower(s[i]))
                    ++i;
                string x;
                for(int k=j;k<i;++k)
                    x+=s[k];
                vec.push_back(mm[x]);
            }
            if(i==s.size())break;
        }
        int num=0;
        vector<int>::size_type ite=0;
        while(ite!=vec.size()){
            if(vec[ite]>=10){
                num*=vec[ite];
                nums.push_back(num);
                num=0;
            }
            else
                num+=vec[ite];
            ite++;
        }
        nums.push_back(num);
        int sum=0;
        for(int i=0;i<nums.size();++i)
            sum+=nums[i];
        cout<<sum<<endl;
    }
    return 0;
}
测试用例:

BaBaiBaShiBa
JiuWanJiuQianJiuBaiJiuShiJiu
YiShi

结果为:



你可能感兴趣的:(拼音翻译成阿拉伯数字)