#include<stdio.h>
#include<string.h>
int main()
{
char c[100];
int l;
int i;
gets(c);
l=strlen(c);
for(i=0;i<l-1;i++)
{
if(c[i]=='-')
{
printf("fu ");
}
else if(c[i]==0)
{
printf("ling ");
}
else if(c[i]==1)
{
printf("yi ");
}
else if(c[i]==2)
{
printf("er ");
}
else if(c[i]==3)
{
printf("san ");
}
else if(c[i]==4)
{
printf("si ");
}
else if(c[i]==5)
{
printf("wu ");
}
else if(c[i]==6)
{
printf("liu ");
}
else if(c[i]==7)
{
printf("qi ");
}
else if(c[i]==8)
{
printf("ba ");
}
else if(c[i]==9)
{
printf("jiu ");
}
}
if(i==l-1)
{
if(c[i]==0)
{
printf("ling");
}
else if(c[i]==1)
{
printf("yi");
}
else if(c[i]==2)
{
printf("er");
}
else if(c[i]==3)
{
printf("san");
}
else if(c[i]==4)
{
printf("si");
}
else if(c[i]==5)
{
printf("wu");
}
else if(c[i]==6)
{
printf("liu");
}
else if(c[i]==7)
{
printf("qi");
}
else if(c[i]==8)
{
printf("ba");
}
else if(c[i]==9)
{
printf("jiu");
}
}
return 0;
}
解决方法一:根据ASCII码,一个数字字符减去0字符可得到这个数字,比如'9'-'0'=9
解决方法二:强制类型转换 (int)xxx 将数字字符转换为数字(我记得是有这么个办法 ,但是我的电脑编译不成功,你可以再查查)
解决方法三:每个条件的等号右边改成字符,比如c[i]=='1'
其他:
如果是负数,完了得break,否则还会输出负号后数字对应的拼音
if内部语句如果只有一条,建议不要加{} ,改成图上写法,会简洁很多
最后一个问题:因为题目要求最后一个数字拼音后面不要加空格,你写了两遍。这个问题一定有优化方法,我觉得可以用二维数组,要是没学的话,你可以等学了以后试试噢,加油!
供参考:
#include <stdio.h>
int main()
{
char* num[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
char c[100]={0};
int i=0;
scanf("%s",c);
for(i=0;c[i]!='\0';i++)
printf(i==0 && c[i]== '-'?"fu":i==0?"%s":" %s",num[c[i]-'0']);
return 0;
}