标签:
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