码迷,mamicode.com
首页 > 其他好文 > 详细

华为机试—拼音翻译成阿拉伯数字(有Wan,Qian,Bai,Shi单位)

时间:2014-12-24 18:08:57      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:华为机试   拼音翻译成阿拉伯数字   拼音转数字   有单位   

题目:拼音翻译成阿拉伯数字

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

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

 

输入 JiuWanJiuQianJiuBaiJiuShiJiu

输出 99999


基本思路:

遍历找到下一个大写字母,截取子串,比较匹配,重要的是处理最后一位是数字还是单位。


#include <iostream>
#include <string>  
using namespace std;  
  
void filter(string str)  
{  
    //各字符串的下标即为其对应的阿拉伯数字  
    char *ch[]={"Ling","Yi","Er","San","Si","Wu","Liu","Qi","Ba","Jiu"};  
	int a=0;//存储数字
    int i,j=1,k,len,sum=0,flag;  
    string substr;  
    len=str.length(); 
    for(i=0;i<len;)  
    {    
        //遇到下一个大写字母的停下来
		if(str[j]<'a'||j==len)
		{
			flag=0;//标记最后是数字还是wan,qian,bai,shi

			substr=str.substr(i,j-i);

			if(!substr.compare("Wan")){
				sum+=a*10000;
			}else if(!substr.compare("Qian")){
				sum+=a*1000;
			}else if(!substr.compare("Bai")){
				sum+=a*100;
			}else if(!substr.compare("Shi")){
				sum+=a*10;
			}else{
				for(k=0;k<10;k++) {              
					if(!substr.compare(ch[k]))  
					{
						flag=1;
						a=k;
						//printf("%d",k);//相等则打印出数字  
						break;  
					} 
				}
			}
            i+=(j-i);//i跳到下一个大写字母开始
			j=i+1;
		}else{
			j++;
		}
    } 
	if(flag)
		printf("%d\n",sum+a);
	else
		printf("%d\n",sum);
}  
  
int main()  
{  
    string str;  
    while(cin>>str){ 
    //cin>>str;
     filter(str);  
    }
    return 0;  
}  

测试结果,可能不周全,欢迎查漏补缺:

技术分享


华为机试—拼音翻译成阿拉伯数字(有Wan,Qian,Bai,Shi单位)

标签:华为机试   拼音翻译成阿拉伯数字   拼音转数字   有单位   

原文地址:http://blog.csdn.net/wtyvhreal/article/details/42126319

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!