解题思路:
1.一个数组存数字的读法,一个数组存单位的读法,这里不需要个位,将个位置空就行,因为平时也不读 “个” 。
2. 通过输入字符串,让每位字符和 ' 0 ' 做差,来获取每一位的数字。
3. 对于0的读法要着重讨论,像50万,只读wu shi 后面加个 wan,其中零不发音的。而遇到非零数字的上一个数字是零,零数字的单位都不读,就多读一个“ling ”即可,如102,读yi bai ling er。
4.另外要对数字出现的10,是读yi shi 还是读 shi 进行分析。这里列出来所有读shi的可能,就避免了读yi shi 的误读错误。如101234,前两位是读shi wan ,而不是yi shi wan。
5.其他直接读出数和数的对应单位即可。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43042683/article/details/108932128
注意事项:
参考代码:
#include <stdio.h>
#include <string.h>
int main() {
char str[100]; // 假设输入的字符串长度不会超过99个字符(留一个位置给'\0')
scanf("%s", str); // 读取字符串,注意这里没有处理空格或特殊字符
char a[10][10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};//构建数字拼音列表
char b[10][10] = {"", "shi", "bai", "qian", "wan", "shi", "bai", "qian", "yi", "shi"};//构建每一位数字的位数读法拼音列表
int len = strlen(str); // 计算输入数的位数
for (int i = 0; i < len; i++) {
int flag = str[i] - '0'; // 将字符转换为对应的数字
if (flag == 0) { // 处理数字0的特殊情况
if (len - i == 5 || len - i == 9) { //len - i就是从左往右数第几位,当零位于万位或亿位时,要输出wan或yi
printf("%s ", b[len - i - 1]);
}
if ((len - i) != 1 && str[i + 1] != '0') {
printf("ling "); //当不是个位且下一位不是0时输出ling
}
} else if ((len == 2 || len == 6 || len == 10) && flag == 1 && i == 0) {
// 处理数字1在特定位置时的读法
printf("shi "); //当首位是1且输入数字最大位是十亿或十万或十时,只输出shi不输出yi
} else { // 其他数字直接读出并加上对应单位
printf("%s %s ", a[flag], b[len - i - 1]);
}
}
return 0;
}
0.0分
1 人评分
采药 (C++代码)浏览:1266 |
点我有惊喜!你懂得!浏览:2071 |
C语言训练-邮票组合问题* (C语言代码)......浏览:645 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:628 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:746 |
WU-整除问题 (C++代码)浏览:611 |
Tom数 (C语言代码)浏览:492 |
杨辉三角 (C语言代码)浏览:484 |
简单的a+b (C语言代码)浏览:506 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:740 |