拼音转数字
输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:
描述: 拼音 yi er san si wu liu qi ba jiu
阿拉伯数字 1 2 3 4 5 6 7 8 9
输入字符只包含小写字母,所有字符都可以正好匹配
运行时间限制:无限制
内存限制: 无限制
输入: 一行字符串,长度小于1000
输出: 一行字符(数字)串
样例输入: yiersansi
样例输出: 1234
#include<iostream>
using namespace std;
bool strtonum (const char *a , char *b)
{
if (a == NULL || b == NULL)
{
return false;
}
int i = 0;
int j = 0;
while(a[i] != '\0'){//yi er san si wu liu qi ba jiu
switch (a[i])
{
case 'y':
if (a[i+1] != 'i'){
return false;
}
i+=2;
b[j++] = '1';
break;
case 'e':
if (a[i+1] != 'r'){
return false;
}
i+=2;
b[j++] = '2';
break;
case 's':
if (a[i+1] == 'a'){
if (a[i+2] != 'n'){
return false;
}
i+=3;
b[j++] = '3';
break;
}
else {
if (a[i+1] != 'i'){
return false;
}
i+=2;
b[j++] = '4';
break;
}
case 'w':
if (a[i+1] != 'u'){
return false;
}
i+=2;
b[j++] = '5';
break;
case 'l':
if (a[i+1] != 'i'){
return false;
}
else{
if (a[i+2] != 'u'){
return false;
}
i+=3;
b[j++] ='6';
break;
}
case 'q':
if (a[i+1] != 'i'){
return false;
}
i+=2;
b[j++] = '7';
break;
case 'b':
if (a[i+1] != 'a'){
return false;
}
i+=2;
b[j++] = '8';
break;
case 'j':
if (a[i+1] != 'i'){
return false;
}
else{
if (a[i+2] != 'u'){
return false;
}
i+=3;
b[j++] = '9';
break;
}
default:
return false;
}
}
b[j] = '\0';
return true;
}
int main()
{
while(1){
cout << "一行字符串,长度小于1000:\n";
char a[1000];
//strcpy(a,"eryiersansiwuliuqibajiusanbajiuqi");
gets(a);
if (a == NULL ){
continue;
}
if (strlen(a) == 1000){
cout << "请输入一行长度小于1000的字符串:\n";
continue;
}
char b[256]=" ";
if (strtonum(a,b)){
cout <<"输入前的一行数字串:\n";
int i = 0;
while (a[i] != '\0'){
cout << a[i];
++i;
}
cout <<"\n转换后的一行数字串:\n";
i = 0;
while (b[i] != '\0'){
cout << b[i];
++i;
}
cout << endl;
}
else{
cout <<" 请输出的字符串存在错误字符 " << endl;
}
}
return 0;
}
测试结果:不考虑输入是大写!