- 论坛徽章:
- 0
|
题目:打印大整数时用逗号分割
假设输入的为全是数字的字符串,按照如下例子的格式格式化输出大整数
输入 输出
空 $0.00
1 $0.01
12 $0.12
123 $1.23
12345 $123.45
123456 $1,234.56
1234567891 $12,345,678.91
我自己写的一个,不是很满意,请高手们找找错误,多提提宝贵意见,谢谢
#include<stdio.h>
#include<string.h>
int mylen(char const *s)
{
int n=0;
if (s==NULL)
return 0;
else{
while(*s++!='\0')
n++;
return n;
}
}
void reverse(char *d,char *s)
{
char *pend=NULL;
unsigned len=mylen(s);
pend=s+len-1;
while((*d++=*pend--) && len--)
;
}
oid formate(char *dst,char const *str)
{
int len;
len=mylen(str);
printf("strlen:[%d]\n",len);
if(!len){
strcat(dst,"$0.00");
}
else if(len==1){
strcat(dst,"$0.0");
strcat(dst,str);
}
else if(len==2){
strcpy(dst,"$0.");
strcat(dst,str);
}
else if(len >2){
char const *ps=str;
char tmp[32]={0};
reverse (tmp,ps);
tmp[mylen(tmp)]='\0';
char itg[32]={0};
strcpy(itg,&tmp[2]);
strcpy(&tmp[2],".");
if(mylen(itg)<=3){
strcat(tmp,itg);
}
else {
int flag=0;
int length=mylen(itg);
while(length-3>0){
strncat(tmp,&itg[3*flag],3);
strcat(tmp,",");
flag++;
length-=3;
}
strncat(tmp,&itg[3*flag],mylen(itg)-3*flag);
}
printf("tmp:[%s]\n",tmp);
reverse(dst,tmp);
}
}
int
main(int arc,char **argv)
{
char result[32]={0};
formate(result,argv[1]);
printf("result:[%s]\n",result);
} |
让问题来得更猛烈些吧
[ 本帖最后由 ruoyisiyu 于 2007-10-11 17:03 编辑 ] |
|