C语言程序设计的一道题,一个把阿拉伯数字转换成中文大写数字的程序。我自己编写如下:

# include <stdio.h>
# include <string.h>

void ChangeType1(char * px, char * pn, char * pw, int len);
void ChangeType2();

int main(void)
{
char x[100]; //存放输入数字
char num[10] = {'零','一','二','三','四','五','六','七','八','九'};
char num2[10] = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
char wei[4] = {'\0','十','百','千'};
char danwei[3] = {'\0','万','亿'};
char wei2[4] = {'\0','拾','佰','仟'};
int len; //判断数字长度,限万亿
int lx; //选择转换类型
char * pn = num, * pn2 = num2, * px = x, * pw = wei, * pw2 = wei2, * pdw = danwei;//设定指针变量

printf("请输入您要转换的阿拉伯数字:");
gets(x);
while (len=strlen(x) > 13)
{
printf("\n");
printf("您输入的数字过大,请重新输入:");
scanf("%s", x);
}

printf("\n您输入的数字是%s\n", x);

printf("请选择需要转换的类型<类型1/类型2,输入1或者2进行选择>:\t");
scanf("%d", &lx);
len = strlen(x);

ChangeType1(px, pn, pw, len);

/*if (lx==1)
{
ChangeType1();
}
else
ChangeType2();

printf();*/ //根据用户选择的类型执行函数

return 0;
}

void ChangeType1(char * px, char * pn, char * pw, int len)
{
char str[100];
char a[100];
char * pa; pa = a;
char * pstr; pstr = str;
strcpy(str, &*px);

char str1, str2;
if (len<=4)
{
while (len>=0)
strncpy(a, str, 1);
*(a+1) = '\0';
strncpy(str, str+1, len);
*(str+len-1) = '\0';

str1 = *(pn+*(pa));
str2 = *(pw+len);

puts(strcat(&str1, &str2));

len = len - 1;
}
else ; //未完待续……
}
这个还没写完,但是那个函数怎么在Exe上面没有执行呢?当然哪个大神要是能把整个C程序编写出来就更好了~~~小弟在此拜谢!!

第1个回答  2012-03-08
char num[10] = {'零','一','二','三','四','五','六','七','八','九'};
char num2[10] = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
char wei[4] = {'\0','十','百','千'};
char danwei[3] = {'万','亿'};
char wei2[4] = {'拾','佰','仟'};
这几个定义不对,因为汉字占两个字节,所要num等的长度要乘以2
wei2和danwei两个,当字符串遇到\0就会结束,所要这样定义是不对的
你要这么定义,也就是定义二维数组
num[10][] = {"零",一”,“二”,“三”,“四”,“五”,“六”,“七”,“八”,“九”};
其他的汉字定义也一样,我就不写了,下面我利用的时候,就默认改过了

思路,首先判断输入的x的长度,接着转换为0~9
lx=strlen(x);
for(i=0;i<lx;i++)
x[i]=x[i]-'0';

接着就是输出了,这个要交替输出
也就是输出一个x的字符0~9对应的num中的数,接着输出对应的万千亿等标识
代码是
for(i=0;i<lx;i++)
{
d=lx-i; //这里要计算这个位在这个字符到最后的位置,你懂
//这个可能控制不好,也就是一位的差距,你自己调试一下就可以
puts(num2[x[i]]); //输出x中的数对应的汉字
//接下来输出相应的百千万亿等汉字
if(d==2||d==6||d==10) //在十、十万、十亿位置输出十
puts(wei[0]);
if(d==3||d==7||d==11) //在百,百万、百亿位置输出百
puts(wei[1]);
if(d==4||d==8||d==12) //在千,千万,千亿位置输出千
puts(wei[2]);
if(d==5) //在万位输出万
puts(danwei[0]);
if(d==9) //在第九位输出亿
puts(danwei[1])
}本回答被提问者采纳
相似回答