首页 > 代码库 > 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和指针 第九章 习题