码迷,mamicode.com
首页 > 其他好文 > 详细

C和指针 第九章 习题

时间:2016-08-31 02:07:40      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

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;
}

  运行:

技术分享

 

C和指针 第九章 习题

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!