华为机试—拼音翻译成阿拉伯数字(只有数字拼音)

该博客介绍了一道华为机试题,内容是将仅包含数字拼音的字符串转化为对应的阿拉伯数字。输入如'JiuBaWuSi',输出应为9854。解题思路是从2到4位的拼音进行扫描,找到对应数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:拼音翻译成阿拉伯数字(只有数字拼音)

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

为了处理方便,输入一定是只有数字拼音的,没有其他的单词或者字符。

输入:JiuBaWuSi

输出:9854


基本思路:

可以看出拼音最短为2个字符,最长为4个字符。

两位开始扫,没有,扫三位,三位没有扫四位,二位三位四位都没有,则从下一位开始扫。


#include <string>  
#include <iostream>  
using namespace std;  
  
void filter(string str)  
{  
    //各字符串的下标即为其对应的阿拉伯数字  
    char *ch[]={"Ling","Yi","Er","San","Si","Wu","Liu","Qi","Ba","Jiu"};  
    int i,j,k,len;  
    string substr;  
    len=str.length();   
    for(i=0;i<len;i++)  
    {    
        //可以看出拼音最短为2个字符,最长为4个字符  
        for(j=i+1;j<len&&(j-i)<4;j++)  
        {  
            substr=str.substr(i,j-i+1);  

            for(k=0;k<10;k++)  
              
                if(!substr.compare(ch[k]))  
                {  
                    printf("%d",k);//相等则打印出数字  
                    break;  
                }               
        }          
    } 
	printf("\n");
}  
  
int main()  
{  
    string str;  
    while(cin>>str){ 
    //cin>>str;
		filter(str);  }
    return 0;  
}  

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值