zoukankan      html  css  js  c++  java
  • 拼音翻译成阿拉伯数字

    输入一串拼音,输出它代表的阿拉伯数字(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

    结果为:



  • 相关阅读:
    Orleans的深入
    Orleans的入门教程
    .net core 微服务通讯组件Orleans的使用与配置
    AddTransient、AddSingleton、AddScoped的区别
    近期做架构师的总结
    大数据分析的深度与假象
    SQL反模式-1
    学习总结---INNODB 事务并发
    Tomcat的error-page掩盖action实例化的exception
    A SQL to insert continuous values
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6814473.html
Copyright © 2011-2022 走看看