华为机试—拼音翻译成阿拉伯数字(有Wan,Qian,Bai,Shi单位)
2014-12-24 17:25
796 查看
题目:拼音翻译成阿拉伯数字
输入一串拼音,输出它代表的阿拉伯数字(Ling,Yi,Er,San,Si,Wu,Liu,Qi,Ba,Jiu),数字不会超过十万
为了处理方便,输入一定是数字带单位的,例如10会是YiShi,而不是一个单独的Shi.
输入 JiuWanJiuQianJiuBaiJiuShiJiu
输出 99999
基本思路:
遍历找到下一个大写字母,截取子串,比较匹配,重要的是处理最后一位是数字还是单位。
测试结果,可能不周全,欢迎查漏补缺:
输入一串拼音,输出它代表的阿拉伯数字(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单位)
- 华为机试—拼音翻译成阿拉伯数字(只有数字拼音)
- 华为机试-拼音翻译成阿拉伯数字
- 拼音翻译成阿拉伯数字_华为SO挑战赛2015年8月
- 拼音翻译为阿拉伯数字
- 每天一道算法题——拼音翻译成阿拉伯数字(只有数字拼音)
- 拼音翻译成阿拉伯数字
- 数字拼音翻译成阿拉伯数字
- 华为机试:中文整数读法的拼音转数字
- 拼音翻译成阿拉伯数字
- 拼音翻译成阿拉伯数字
- 牛客网_华为机试_011_数字颠倒
- 【华为机试】数字颠倒
- 阿拉伯数字的翻译【优化】
- 华为机试—字符串删除数字大写变小写
- 华为机试—翻译电话号码
- PAT 1082. Read Number in Chinese (25)(把九位内的数字翻译成拼音输出)
- [华为机试练习题]16.数字统计
- [华为机试练习题]43.在字符串中找出连续最长的数字串
- 华为机试题之拼音转数字