把中文汉字大写数字 转换成 阿拉伯数字,如十万一千一百十二 变成 101112.
#include <stdio.h>
#include <string.h>
/*
* 注意字符串的比较用strcmp();
*/
int change(const char [][3]);
int match(const char *);
int is_flag(const char *);
int main(void)
{
char orig[][3]={"十", "万","一", "千", "一","百","十","二","#"};
printf("Answer is %d\n",change(orig));
return 0;
}
int change(const char orig[][3])
{
int i=0;
int sum=0;
int cur;
int flag;
while(strcmp(orig[i], "#") != 0)
{
cur = match(orig[i]);
flag = is_flag(orig[i]);
if(flag == 0) //字符为“零”
i++;
else if(flag > 0)//字符为1-10时
if(strcmp(orig[i+1], "#") != 0)
{
if(is_flag(orig[i+1]) == 1) //当 十后面 为数字时,例如十二
sum+=cur;
else //当 十后面 为量级时, 例如十万
sum+=cur*match(orig[++i]);
i++;
}
else //当字符为量级时,如“百”
{
sum+=cur;
i++;
}
else
{
sum+=cur;
++i;
}
}
return sum ;
}
int match(const char * str)
{
if(strcmp(str, "零")==0 ) return 0;
else if(strcmp(str, "一") == 0) return 1;
else if(strcmp(str, "二") == 0) return 2;
else if(strcmp(str, "三") == 0) return 3;
else if(strcmp(str, "四") == 0) return 4;
else if(strcmp(str, "五") == 0) return 5;
else if(strcmp(str, "六") == 0)return 6;
else if(strcmp(str, "七") == 0) return 7;
else if(strcmp(str, "八") == 0) return 8;
else if(strcmp(str, "九") == 0) return 9;
else if(strcmp(str, "十") == 0) return 10;
else if(strcmp(str, "百") == 0) return 100;
else if(strcmp(str, "千") == 0) return 1000;
else if(strcmp(str, "万") == 0) return 10000;
else return -1;
}
int is_flag(const char * str)
{
if(match(str)>=1 && match(str)<=10) return 1;
else if(match(str) == 0) return 0;
else return -1;
}
本文介绍了一种将中文大写数字转换为阿拉伯数字的方法,通过解析特定的字符串实现转换功能。
6897

被折叠的 条评论
为什么被折叠?



