题目:拼音翻译成阿拉伯数字
输入一串拼音,输出它代表的阿拉伯数字(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;
}
测试结果,可能不周全,欢迎查漏补缺: