免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1942 | 回复: 8
打印 上一主题 下一主题

新手问个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-13 18:55 |只看该作者 |倒序浏览
因为单位业务需要,我现在在做一个将小写金额转化为大写金额的程序(C++),
但是对中文字符在C中的定义不大清楚,是不是它被包含在stdio.h中呢,一个中文字符占多少字节?我是菜鸟,希望大家能赐教!!谢谢
还有,如果谁手头有现成的程序,可以的话直接email(wyx6fox@sina.com)给我,不尽感谢!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-02-13 19:55 |只看该作者

新手问个问题

#include<stdio.h>;
char str[64] = "币";
char tbl0[] = "零壹贰叁肆伍陆柒捌玖";
char tbl1[] = "万仟佰拾亿仟佰拾万仟佰拾元 角分整";

char* UPMONEY( double mony )

{
  char buf[17];
  int i, j, c, p;

  sprintf(buf, "%16.2lf", mony);
  printf( "%s \n", buf );

  p = 2;
  j = 0;
  for( i = 0; i < 16; i++)
  {
      switch( c = buf )
      {
          case '1':
          case '2':
          case '3':
          case '4':
          case '5':
          case '6':
          case '7':
          case '8':
          case '9':
              if( j != 0 )
              {
                  str[p++] = tbl0[0];     /* 零 */
                  str[p++] = tbl0[1];
              }
              c = 2 * (c - '0');
              str[p++] = tbl0[c++];       /* 数 */
              str[p++] = tbl0[c++];

              str[p++] = tbl1[2*i];       /* 数的位 */
              str[p++] = tbl1[2*i+1];
              j = 0;
              break;

          case '0':
              j++;
              if( ((j<4) &amp;&amp; ((i == 4) || ( i == 8 ))) ||
                  ( i == 12 ) )
              {
                   str[p++] = tbl1[2*i];     /* 亿 万 元 */
                   str[p++] = tbl1[2*i+1];
              }
              break;

          case ' ':
              break;

          case '.':
              /* j = 0  我不太清楚 三十元一角 还是三十元零一角那个对 */
              break;

      };
  }
  if( (j>;=2 ) &amp;&amp; ( i == 16 ) )
  {
      str[p++] = tbl1[2*i];     /* 整 */
      str[p++] = tbl1[2*i+1];
  }
  str[p] = '\0';
  return(str);
}


main()

{
  double l;
  char str[64];


  printf("please insert a number:";
  scanf("%lf",&amp;l);
  sprintf(str,"%s",UPMONEY(l));
  printf("the number is %s",str);
}

论坛徽章:
0
3 [报告]
发表于 2003-02-13 20:26 |只看该作者

新手问个问题

谢谢兄弟!十分感谢!
但是不知道你考虑到没有,对于10100131.00,大写金额应该显示为:
壹千零壹拾万零壹百元正,这可需要很多分支判断啊,看来还是多要点判断
分支哦!!

论坛徽章:
0
4 [报告]
发表于 2003-02-14 14:22 |只看该作者

新手问个问题

也不一定,只要在最后来一个判断。

论坛徽章:
0
5 [报告]
发表于 2003-02-14 15:28 |只看该作者

新手问个问题

那1000010001.00呢,有问题吧~~~~~~

论坛徽章:
0
6 [报告]
发表于 2003-02-14 18:01 |只看该作者

新手问个问题

没有问题
我试过啦
壹千零壹拾万零壹百叁拾壹元正

论坛徽章:
0
7 [报告]
发表于 2003-02-15 19:31 |只看该作者

新手问个问题

不错不错。这个程序居然能存活这么久。

可惜这个程序对于 0.10元 显示可能不对。。

论坛徽章:
0
8 [报告]
发表于 2003-02-15 21:35 |只看该作者

新手问个问题

测试几个BUG:小写金额:
12002323.23
101.00
0.00
1.00
0.01;
1000000000.03;
10100100.00;
100010000.00;
10010001000.30;
这些能显示正确吗?好象不哦

论坛徽章:
0
9 [报告]
发表于 2003-02-16 00:16 |只看该作者

新手问个问题

你没有真的测试只是想像有这些问题。
这个程序只有1元以下的问题。
测试结果如下。
在打印"元"时和打印角的时候
判断一下金额是否大于1元.

please insert a number:     12002323.23
the number is 币壹仟贰佰万零贰仟叁佰贰拾叁元贰角叁分

please insert a number:          101.00
the number is 币壹佰零壹元整

please insert a number:            0.00
the number is 币元整

please insert a number:            1.00
the number is 币壹元整

please insert a number:            0.01
the number is 币元零壹分

please insert a number:   1000000000.03
the number is 币壹拾亿元零叁分

please insert a number:     10100100.00
the number is 币壹仟零壹拾万零壹佰元整

please insert a number:  10010001000.30
the number is 币壹佰亿零壹仟万零壹仟元零叁角
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP