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

Dear 丶 2023-10-07 11:28 131阅读 0赞

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

要求:
编写程序将一个数字字符串(代表以美分为单位的金额)转换为美元形式,如:
在这里插入图片描述
函数原型为:
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值的字符之前便需进行插入逗号的操作。
代码:

  1. #include <stdio.h>
  2. void dollars( register char *dst,register char const *src )
  3. {
  4. int len;
  5. if( dst==NULL||src==NULL )
  6. return;
  7. *dst++ ='$';
  8. len=strlen( src );
  9. /*若数字字符串足够长,复制将出现在小数点左边的数字,在适当的位置
  10. **加逗号。若字符串短于3个数字,在小数点前面再添加一个'0'
  11. */
  12. if( len>=3 )
  13. {
  14. int i;
  15. for( i=len-2;i>0; )
  16. {
  17. *dst++ = *src++;
  18. if( --i>0 && i%3==0 )
  19. *dst++ = ',';
  20. }
  21. }
  22. else
  23. *dst++='0';
  24. /*存储小数字,然后存储'src'中剩余的数字。若'src'中的数字少于2个
  25. **数字,用'0'填充,然后在'dst'中添加NUL终止符
  26. */
  27. *dst++ = '.';
  28. *dst++ = len < 2 ? '0' : *src++;
  29. *dst++ = len < 1 ? '0' : *src;
  30. dst=0;
  31. }

发表评论

表情:
评论列表 (有 0 条评论,131人围观)

还没有评论,来说两句吧...

相关阅读

    相关 字符串转换数字

    声明:题目来源于《王道》 问题描述:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如,输入字符串“12345”,输出整数“12345”。 解决方法:依次扫描字符串