首页 > 代码库 > C和指针 第九章 习题
C和指针 第九章 习题
9.15 编写函数格式化金钱为标准字符串
#include <stdio.h>#include <string.h>#define TEMP_LEN 1000void 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;}
运行:
C和指针 第九章 习题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。