鱼C论坛

 找回密码
 立即注册
查看: 4718|回复: 9

看不懂,谁解释下

[复制链接]
发表于 2013-5-16 10:47:50 | 显示全部楼层 |阅读模式
5鱼币
1)会计记账时通常要求大整数用逗号进行分隔,下列函数实现将以分为单位的数字字符串转变为以元为单位,具体输出格式如表1所示。
表1
输入
输出
输入
输出
¥0.00
12345
¥123.45
1
¥0.01
123456
¥1,234.56
12
¥0.12
1234567
¥12,345.56
1234
¥12.34
123456789
¥1,234,567.89
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *dollars(char const* src)
{ int len,len1,i;
char *dst,*resultp;
if(NULL==src)
   return NULL;
len=strlen(src);
len1=len+len/3+2;
dst=(char *)malloc(len1);
if(!dst)
{   return NULL;
}
           ①            
*dst++=’¥’;
if(len>=3)
{ int i;
for(i=len-2;i>0;)
{*dst++=*src++;
if(②            )
       *dst++=’,’;
}}
else { *dst++=’0’;}
*dst++=’.’;
   ③            
*dst++=len<1?’0’:*src;
*dst=0;
return resultp;
}

最佳答案

查看完整内容

我的乖乖,脑袋都快炸了,老了,不过总算搞出来了,vs2010
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-16 10:47:51 | 显示全部楼层
我的乖乖,脑袋都快炸了,老了,不过总算搞出来了,vs2010
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>


  4. char *dollars(char const* src)
  5. {
  6.         int len,len1,i;
  7.         char *dst,*resultp;
  8.         if(NULL==src)
  9.                 return NULL;
  10.         len=strlen(src);
  11.         //len1=len+len/3+2;
  12.         if ((len/3)>0)
  13.         {
  14.                 len1=len+len/3+4;
  15.         }else
  16.         {
  17.                 len1=7;
  18.         }
  19.         dst=(char *)malloc(len1);
  20.         memset(dst,0,len1);
  21.         //*dst=*src;
  22.         if(!dst)
  23.         {   
  24.                 return NULL;
  25.         }
  26.         //①   
  27.         resultp = dst;
  28.         //*dst++='¥';
  29.         *dst++=0xa3;
  30.         *dst++=0xa4;
  31.         if(len>=3)
  32.         {
  33.                 int len2 = len - 2;
  34.                 if ((len2%3==0) && (len2>2))
  35.                 {
  36.                         *dst++=*src++;
  37.                         len--;
  38.                 }//else
  39.                 {
  40.                         for (int i=len-2;i>0;i--)
  41.                         {
  42.                                 if ((i%3)==0)
  43.                                 {
  44.                                         *dst++=',';
  45.                                 }//else
  46.                                 {
  47.                                         *dst++=*src++;
  48.                                 }
  49.                                 if (len>2)
  50.                                 {
  51.                                         len--;
  52.                                 }
  53.                         }

  54.                 }
  55.         }
  56.         else
  57.         {
  58.                 *dst++='0';
  59.         }
  60.         *dst++='.';
  61.         //③  
  62.         if (len==2)
  63.         {
  64.                 *dst++=*src++;
  65.         }else
  66.         {
  67.                 *dst++='0';
  68.         }
  69.         *dst++=(len<1?'0':*src);
  70.         *dst=0;
  71.         return resultp;
  72. }

  73. void main()
  74. {
  75.         char szdollar[200]={0};
  76.         while(true)
  77.         {
  78.                 _flushall();
  79.                 scanf_s("%s",szdollar,100);
  80.                 if (strcmp(szdollar,"exit")==0)
  81.                 {
  82.                         break;
  83.                 }
  84.                 strcpy_s(szdollar,200,dollars(szdollar));
  85.                 printf_s("%s\n",szdollar);
  86.         }
  87. //         char test[10]={0};
  88. //         test[0]=0xa3;
  89. //         test[1]=0xa4;
  90. //         test[2]='0';
  91. //         test[3]='.';
  92. //         test[4]='0';
  93. //         test[5]='0';
  94.         //strcpy_s(test,9,"¥0.00");
  95.         //printf_s("%s\n",test);

  96. }
复制代码
2.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-16 12:22:12 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-16 15:51:15 | 显示全部楼层
本帖最后由 熊文杰 于 2013-5-16 15:58 编辑

楼主确定这程序是对的?
len1=len+len/3+2;
首先这句,假设我输入的是1,这里的结果就是3.但是要求转换的结果是¥0.01,这个明显要分配6个字节的空间。就算这个函数能跑起来百分之百的会越界操作。


int i;
for(i=len-2;i>0;)
{*dst++=*src++;
if(②            )
       *dst++=’,’;
}

这里意思很明显 是想说减去末尾的两个数之后,每3个数就加个逗号。但是,这代码写的,,,无语了,敢不敢写个i-- ,代码这是想死循环么?我觉得要是用下标的方法从后往前会方便点,既然这里非要从前往后就只能这样了
我只能揣测意思,(len -2)%3 + 3x 处都要加逗号,这里假设我在for循环里面加了一个i--, 也就是有
i == (len-2)%3    这个是第二空


再继续往下看

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-16 16:00:43 | 显示全部楼层
好吧,既然楼上已经给出了,我也就不看了,楼上是改正之后的程序。只能说 这个题目很多错误。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-16 20:23:09 | 显示全部楼层
这个题目是对口升学高考题。。。。应该是没错的。。不过楼上的辛苦了。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-17 17:32:46 | 显示全部楼层
其实考试的东西真不靠谱!!特别是学校的一些知识
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-18 01:07:23 | 显示全部楼层
完全不知所以:'(
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-22 13:05:21 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-22 23:12:58 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-28 09:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表