标签:
9.15 编写函数格式化金钱为标准字符串
#include <stdio.h>
#include <string.h>
#define TEMP_LEN 1000
void dollars(char *dest, char const * src)
{
int len;
int num;
//当长度大于二,第一个逗号之前的字数
int headerLen;
//当前复制的位置
int loc;
len = strlen(src);
char *dstTmp = dest;
if (len <= 2) {
//长度小于二,所有的都是五位,且前三位为 "$0.", 从第五位‘\0‘开始向前复制
loc = 5;
strcpy(dest, "$0.");
//开始复制,还没有到复制结束点,即小数点前时
while (loc >= 3) {
//如果还有值需要复制,则继续复制
if (len >= 0) {
dest[loc] = src[len];
len--;
}else{
//如果没有值复制,则补零
dest[loc] = ‘0‘;
}
//向前位移一位
loc--;
}
}else{
/*长度大于二,最后两位可以先不管,将剩下的长度,与三 mod 操作,余数是开始的逗号前面的数字个数。
例如123456, (6 - 2) % 3 = 1,则第一个逗号前有1个数字,余数为零不加逗号*/
*(dstTmp++) = ‘$‘;
//当前正在复制的字符的坐标,和头部字符个数 0 1 2对应 3位 1位 2位
loc = 0;
headerLen = (len - 2) % 3;
//开始从头往后复制字符
while (loc < len - 2) {
//当前位置为headerLen余数 + 3时,且src长度大于5时,此位置放置逗号,第一位不放逗号
if (len > 5 && (loc % 3) == headerLen && loc > 0) {
*dstTmp++ = ‘,‘;
*dstTmp = src[loc++];
}else {
//其他情况均复制字符,loc移动一位
*dstTmp = src[loc];
loc++;
}
dstTmp++;
}
//尾数处理,加小数点,然后把最后两个数加上,然后加一个‘\0‘尾.
*dstTmp++ = ‘.‘;
*dstTmp++ = src[loc++];
*dstTmp++ = src[loc];
*dstTmp = ‘\0‘;
}
}
int main()
{
char src1[] = "";
char src2[] = "1";
char src3[] = "12";
char src4[] = "123";
char src5[] = "1234";
char src6[] = "12345";
char src7[] = "123456";
char src8[] = "1234567";
char src9[] = "123456789";
char dest[100];
dollars(dest, src1);
printf("%s\n", dest);
dollars(dest, src2);
printf("%s\n", dest);
dollars(dest, src3);
printf("%s\n", dest);
dollars(dest, src4);
printf("%s\n", dest);
dollars(dest, src5);
printf("%s\n", dest);
dollars(dest, src6);
printf("%s\n", dest);
dollars(dest, src7);
printf("%s\n", dest);
dollars(dest, src8);
printf("%s\n", dest);
dollars(dest, src9);
printf("%s\n", dest);
while (1)
;
return 0;
}
运行:

标签:
原文地址:http://www.cnblogs.com/yangxunwu1992/p/5824319.html