沉溺C++

记忆经典

C++博客 首页 新随笔 联系 聚合 管理
  3 Posts :: 4 Stories :: 2 Comments :: 0 Trackbacks
//********************************************************
//   模块:数字转换为中文大写
//   编写:黄建雄   2003-09-02
//********************************************************
#include "stdafx.h"

static char   *unit1[] = {
   "拾",
   "佰",
   "仟"
   };

static char   *unit2[] = {
   "万",
   "亿"
   };

static char   *digital[] = {
   "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"
   };

//******************************************************
//   功能:将万以内的数据转换成字符,字符串与阅读方面相反
//   long level[in]:要转换的数据
//   char *buf[out]:字符输出
//   备注:内部函数
//******************************************************
static void GetLevelText(long level,char *buf)
{
   int digit;
   BOOL bPreZero=FALSE;
   BOOL bZeroValidate=FALSE;
   int i=0;
   int  unit=-1;
   while(level){
      digit=level%10;
      if(digit)
      {
         if(bPreZero&&bZeroValidate)
         {
            strcat(buf,digital[0]);
            i+=2;
         }
         if(unit!=-1)// buf[i++]=unit1[unit];//unit
         {
            strcat(buf,unit1[unit]);
            i+=2;
         }
         strcat(buf,digital[digit]);
         i+=2;
         bPreZero=FALSE;
         bZeroValidate=TRUE;
      }else
      {
         bPreZero=TRUE;
      }
      unit++;
      level/=10;
   }
   buf[i]=0;
}

//************************************************************
//   功能:数据转换成中文字符
//   long num[in]:要转换的数据
//   char *buf[out]:字符输出
//  返回值:TRUE-转换成功,FALSE-失败,数据超过处理范围
//************************************************************
BOOL Num2UpDigit(long num,char *buf)
{
   long level1,level2,level3;
   char level1buf[17]={0},level2buf[17]={0},level3buf[17]={0};
   int  p=0;
   level1=num%10000;
   num/=10000;
   level2=num%10000;
   num/=10000;
   level3=num;
   if(num/10000) return FALSE;//超过数据处理范围
   
   //将数据分成三级
   if(level1)   GetLevelText(level1,level1buf);
   if(level2)   GetLevelText(level2,level2buf);
   if(level3)   GetLevelText(level3,level3buf);
   
   if(level3){
      for(int i=strlen(level3buf)-2;i>=0;i-=2)
      {
         memcpy(buf+p,level3buf+i,2);
         p+=2;
      }
      memcpy(buf+p,unit2[1],2);//级别单位
      p+=2;
   }
   if(level2){
      if(level3&&level2/1000==0)//加零
      {
         memcpy(buf+p,digital[0],2);
         p+=2;
      }
      for(int i=strlen(level2buf)-2;i>=0;i-=2)
      {
         memcpy(buf+p,level2buf+i,2);
         p+=2;
      }
      memcpy(buf+p,unit2[0],2);//级别单位
      p+=2;
   }else if(level3&&level1)//加零
   {
      memcpy(buf+p,digital[0],2);
      p+=2;
   }
   if(level1){
      if((level2||level3)&&level1/1000==0&&!(level3&&!level2))//加零
      {
         memcpy(buf+p,digital[0],2);
         p+=2;
      }
      for(int i=strlen(level1buf)-2;i>=0;i-=2)
      {
         memcpy(buf+p,level1buf+i,2);
         p+=2;
      }
   }
   buf[p]=0;
   return TRUE;
}
posted on 2009-02-19 14:37 俊杰 阅读(290) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理