把中文汉字大写数字 转换成 阿拉伯数字,如十万一千一百十二 变成 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; }