将数字字符串转换为美元形式

将数字字符串转换为美元形式

要求:
编写程序将一个数字字符串(代表以美分为单位的金额)转换为美元形式,如:
在这里插入图片描述
函数原型为:
void dollar( char *dest,char const *src );
src指向需要被格式化的字符,格式化的结果保存在dest中。要求所创建的字符串以一个NUL字节结尾。src的值不能被修改。

思路:
由于当字符串长度小于3个字符时会出现需增添’0’的情况,应做特殊讨论,所以应将小数点前和小数点后的转换分开进行,当小数点前的部分操作完毕,下一个操作便是插入小数点,以及对小数部分进行转换。
对于字符串长度小于3个字符时的情况,它们的共性是在$后的小数点前部分,都为’0’,对于小数部分,当字符数为2时,不需增添’0’,字符数为1时,需增添一个’0’,字符串为0时,需增添两个’0’,考虑使用条件操作符以包含所有上述情况。
对于字符数大于等于3的字符串,其转换过程是一个依次复制的过程,不过需要在特定位置插入逗号,设i为去除两个小数部分字符后的字符数,使用其控制循环,当i减为0时,证明小数点前的部分已复制完毕。研究src去除最后两个字符后的字符串,若将最后一个字符编号为1,倒数第二个字符编号为2,以此类推……,那么从最后往前看,每出现3个字符便需加逗号,即当i%3==0时为加逗号的条件之一,因此在复制编号为此i值的字符之前便需进行插入逗号的操作。
代码:

#include <stdio.h>
void dollars( register char *dst,register char const *src )
{
	int len;
	if( dst==NULL||src==NULL )
		return;
	*dst++ ='$';
	len=strlen( src );
	/*若数字字符串足够长,复制将出现在小数点左边的数字,在适当的位置
	**加逗号。若字符串短于3个数字,在小数点前面再添加一个'0'
	*/
	if( len>=3 )
	{
		int i;
		for( i=len-2;i>0; )
		{
			*dst++ = *src++;
			if( --i>0 && i%3==0 )
				*dst++ = ',';
		}
	}
	else
		*dst++='0';
	/*存储小数字,然后存储'src'中剩余的数字。若'src'中的数字少于2个
	**数字,用'0'填充,然后在'dst'中添加NUL终止符
	*/
	*dst++ = '.';
	*dst++ = len < 2 ? '0' : *src++;
	*dst++ = len < 1 ? '0' : *src;
	dst=0;
}

猜你喜欢

转载自blog.csdn.net/qq_44709990/article/details/105000443
今日推荐