这个是很早之前用C语言实现的人民币小写转大写的方法

/****************************************************************************** 函数名称: * 功能描述: 将用阿拉伯数字表示的金额转换为用中文大写数字表示。*           金额范围:-9999999999999999.99 —— 9999999999999999.99 数量级:  千万亿精确值:  小数点后两位 * 输入参数: 阿拉伯数字表示的金额*                      * 输出参数: 中文大写数字表示的金额* 返 回 值: *           ***************************************************************************** Who            Date       Action       Memo* ChengCheng         2011-07-20      cc@tkc8.com**************************************************************************** TIP: C-Create M-Modify***************************************************************************//*---------------------------- 头文件定义 ------------------------*/
#include    <stdio.h>
#include    <string.h>
#include    <stdlib.h>
#include    <unistd.h>
/*--------------------------- 头文件定义结束 -------------------------*//*------------------------ 以下内容相关函数定义 ------------------------*/#define    MAX_SMALL_AMOUNT_LEN            19
#define SMALL_AMOUNT_LEN                MAX_SMALL_AMOUNT_LEN
#define SMALL_PART_LEN                  2
#define BIG_AMOUNT_LEN                  128
#define ONE_WORD_LEN                    2
/*------------------------ 以上内容相关函数定义 ------------------------*//**去空格*/
void amount_trim ( char *s, char Mode )
{int  i ;char *p ;if ( s == NULL ) {return ;}if ( strlen ( s ) == 0 )  {return ;}p = s ;switch ( toupper ( Mode ) ){case 'A':case 'L':while ( *p==' ' || *p== '\t' ) p++ ;strcpy ( s , p ) ;if(toupper ( Mode )== 'L' ){break ;}case 'R':while ( ( strlen ( s ) >= 1 ) &&( ( s [ strlen ( s ) - 1 ] == ' ' ) ||( s [ strlen ( s ) - 1 ] == '\t' ) ) )s [ strlen ( s ) - 1 ] = 0x00 ;break ;      }return ;
} /** 检查金额的有效性*/
int amount_is_valid( char *buffer, int len )
{long ll_loop = 0;int  li_dots = 0;/* --判断输入参数的有效性,如果输入参数不合法,则视为金额无效-- */if( buffer == NULL || len <= 0 ){return( 0 );}else{for( ll_loop = 0; ll_loop < len; ll_loop++ ){if( ll_loop == 0 && buffer[ ll_loop ] == '-' ){continue;}if( buffer[ ll_loop ] == '.' ){li_dots++;}if(( buffer[ ll_loop ] < '0' || buffer[ ll_loop ] > '9' ) && buffer[ ll_loop ] != '.' ){return( 0 );}}}if( li_dots >= 2 ){return( 0 );}return( 1 );
}/**转换成大写*/
char * amount_switch_small_to_big( char *szNum )
{/* --定义-- */static char CapsBuf[ 256 ];char buf[ SMALL_AMOUNT_LEN + 1 ];char str[ BIG_AMOUNT_LEN + 1 ];char power[ ONE_WORD_LEN + 1 ];char big[ ONE_WORD_LEN + 1 ];int  position;int  point_pos;int  index;int  f_big;int  f_power;int  is_small_zero;int  i;/* --初始化-- */memset(( char * )CapsBuf, 0x00, sizeof( CapsBuf ));index = 0;position = 0;f_big = 0;f_power = 0;is_small_zero = 0;i = 0;point_pos = MAX_SMALL_AMOUNT_LEN - SMALL_PART_LEN - 1;memset(( char * )CapsBuf, 0x00, sizeof( CapsBuf ));memset(( char * )buf, 0x00, sizeof( buf ));memset(( char * )str, 0x00, sizeof( str ));memset(( char * )power, 0x00, sizeof( power ));memset(( char * )big, 0x00, sizeof( big ));/* --检查输入参数的有效性-- */if( !szNum || !strlen( szNum )){return( "ERROR" );}/* --去空格-- */amount_trim( szNum, 'A' );/* --检查金额的有效性-- */if( !amount_is_valid( szNum, strlen( szNum ))){return( "Invalid Amount" ); }/* --判断是否为负数-- */if( szNum[ 0 ] == '-') {szNum++; strcpy( CapsBuf, "负" );}/* -- 格式化 -- */ /* ---- 小数部分格式化 ---- *//* ------ 找到小数点的位置,如果没有小数点point_pos的值为strlen( buf ) ------ */    point_pos = 0;while( szNum[ point_pos ] != '.' && ( point_pos < strlen( szNum ) ) ) {point_pos++;    }if( point_pos == strlen( szNum )){strcat( szNum, "." );}while( strlen( szNum ) - point_pos < SMALL_PART_LEN + 1 ){strcat( szNum, "0" ); } szNum[ point_pos + SMALL_PART_LEN + 1 ] = 0x00;/*sprintf( stderr, "小数部分格式化后:%s", ( char * )szNum );*//* ---- 整数部分格式化 ----*/    /* ------ 去掉小写金额前面可能存在的多余的零 ------ */i = 0;   while( szNum[ i ] == '0'){if( i < strlen( szNum ) && szNum[ i + 1 ] != '.'){szNum++;}else{i++;}   }   /* -- 格式换完毕 --*//* -- 输入长度验证 -- *//*if( point_pos + SMALL_PART_LEN + 1 < strlen( szNum ) ) {   sprintf( CapsBuf, "小数部分长度超过:%d", SMALL_PART_LEN );return( CapsBuf );     } */if( point_pos + SMALL_PART_LEN + 1 > MAX_SMALL_AMOUNT_LEN ) {    sprintf( CapsBuf, "整数部分长度超过:%d", MAX_SMALL_AMOUNT_LEN - SMALL_PART_LEN - 1 );return( CapsBuf );} if( szNum[0]=='.' ){buf[0] = '0';      }            strcat( buf, szNum );/************ 执行转换 *******************/ /* -- 循环处理 -- */point_pos = strlen( buf ) - SMALL_PART_LEN - 1;   i = 1;while( buf[ point_pos + i ] == '0' ){i++;}if( i > SMALL_PART_LEN  ){is_small_zero = 1;}position = 0;            index = 0;   while( index < strlen( buf ) ){/* 数值位转换阶段 */switch( buf[ index ] ){case '0':sprintf( big, "零" ); f_power = 1;f_big = 1; /*  解决什么时候显示 "零" */if(( index + 1 ) < strlen( buf )){if( buf[ index + 1 ] != '0' ){f_big = 0;}            }                                         break;case '1':sprintf( big, "壹" );break;case '2':sprintf( big, "贰" );break;case '3':sprintf( big, "叁" );break;case '4':sprintf( big, "肆" );break;case '5':sprintf( big, "伍" );break;case '6':sprintf( big, "陆" );break;case '7':sprintf( big, "柒" );break;case '8':sprintf( big, "捌" );break;case '9':sprintf( big, "玖" );break;default:f_power = 1;f_big = 1; break;}         /* 权位转换阶段 */          switch( point_pos - index ){                                                       case 13:case 5:sprintf( power, "万" );                  f_power = 0;if( buf[ index ] == '0' ){f_big = 1;}if( point_pos > 8 && point_pos - index == 5){if( buf[ point_pos - 5 ] == '0' && buf[ point_pos - 6 ] == '0' && buf[ point_pos - 7 ] == '0' && buf[ point_pos - 8 ] == '0'){f_power = 1;}}break;   case 16:case 12:case 8:case 4:sprintf( power, "仟" );break;case 15:case 11:case 7:case 3:sprintf( power, "佰" );break;case 14:case 10:case 6:case 2:sprintf( power, "拾" );break;case 9:sprintf( power, "亿" );f_power = 0;if( buf[ index ] == '0' ){f_big = 1;}break;case 1:sprintf( power, "元" );if( buf[ index ] == '0' ){f_big = 1;}/* 解决什么时候不显示"元" */if( position == 0 && f_big == 1 && !is_small_zero ){f_power = 1;}else{f_power = 0;}/* 解决什么时候显示"0" */if( position == 0 && f_big == 1 && is_small_zero ){f_big = 0;}                                             break;case 0:sprintf( power, "整" );f_power = 1;if( is_small_zero ){f_power = 0;}  break;case -1:sprintf( power, "角" );/* 解决什么时候不显示"0" */if( position == 0 && buf[ index ] == '0'){f_big = 1;}break;case -2:sprintf( power, "分" );break;default:f_power = 1;break;} if(!f_big){str[ position++ ] = big[ 0 ];str[ position++ ] = big[ 1 ];}if(!f_power){          str[ position++ ] = power[ 0 ];str[ position++ ] = power[ 1 ];     }f_big = 0;f_power = 0; index++;                    } /* 循环处理完毕 */str[ position ] = 0x00;strcat( CapsBuf, str );return( CapsBuf );
}int main()
{char ch[ 50 ];fprintf( stderr, "请输入小写金额: " );fflush( stdin );gets( ch );fflush( stdin );fprintf( stderr, "转换后大写金额: [%s]\n", ( char * )amount_switch_small_to_big( ch ));return( 0 );
}

转载于:https://my.oschina.net/u/3381391/blog/1529229

C语言实现人民币小写转大写相关推荐

  1. c语言人民币小写转换成大写,C语言实现人民币小写转大写

    这个是很早之前用C语言实现的人民币小写转大写的方法 /************************************************************************* ...

  2. java把小写变大写_用java实现人民币小写变大写的方法

    用java语言可以实现人民币小写转换为大写吗?如何实现呢?下面常见的用java实现人民币小写变大写的方法可以说是最精简的了,希望大家可以学习下. 这里介绍一个通过取余的办法来实现将人民币小写转换为大写 ...

  3. golang实现人民币小写转大写

    2019独角兽企业重金招聘Python工程师标准>>> 使用golang的正则表达式实现人民币小写转大写,代码如下: package mainimport ("regexp ...

  4. 人民币小写转换为大写函数

    人民币小写转换为大写 <script language=javascript> mymoney=window.prompt("请输入金额:"); </script ...

  5. 人民币小写转大写的一般方法

    人民币小写转大写的一般方法.还可以 const char* RMB(double rmb) {     if(rmb<0) return NULL;     static char *CCC[1 ...

  6. 英文转中文和人民币小写转大写

    public static string PinYin(string mystr)   { //指转换一个中文    string tt;    if ((mystr.ToUpper().Compar ...

  7. c语言如何小写转换为大写字母,c语言怎么将小写转换为大写

    c语言怎么将小写转换为大写? 在 C 语言中区分字母的大小写,利用 ASCII 码中大写字母和小写字母之间的转换关系(差值为 32),可以将小写字母转换为大写字母.编写程序实现,从键盘上输入一个小写字 ...

  8. php人民币小写转大写函数

    发现csdn所用的代码高亮插件也有同样的bug,当代码中含有empty函数时,总是会输出两个.本想在这里发下代码的,一看发出来是错的,还是作罢,以免误导同学.留个链接吧:php人民币小写转大写函数

  9. php人民币小写转大写函数,php 人民币小写怎么转大写

    php人民币小写转大写的方法:首先创建一个PHP示例文件:然后通过"function num2rmb($number = 0, $int_unit = '', $is_round=FALSE ...

最新文章

  1. android layout 点击,Tips_Android点击事件(Down、Move、Up)的分发_重写Layout响应拖动事件...
  2. 前端知识点梳理(一)
  3. PHP 截取字符串乱码的解决方案
  4. 虚拟计算机用户权限分配,虚拟机实例的权限和安全配置
  5. ReplaceAll()和Replace的实战用法
  6. 软件测试—软件测试基础知识—(三)软件测试的原则和(四)软件测试策略
  7. JQuery常用方法一览【转】
  8. 数据结构与算法之算法篇
  9. isbn书号查询php代码,eoLinker-API Shop ISBN书号查询 PHP调用示例代码
  10. 九种常见的数据分析模型
  11. 汇集了很多swift 学习指南
  12. (原创)IR2101应用笔记(IR2101)(全桥)(MOS)
  13. 服务器是什么?跟电脑有啥区别?
  14. TPS和事务响应时间的关系、计算公式(转载)
  15. Win10激活失败的原因之一
  16. 4G/5G聚合路由器是什么意思?
  17. mysql list database_Navicat Premium 操作MySQL数据库
  18. Freemarker + flying-saucer-pdf 基于IText2.17实现HTML文档转换成PDF
  19. 软考中级哪个通过率高且简单?
  20. 第01章 网络数据采集入门

热门文章

  1. 【巴迪亲子英语启蒙课堂】会日常单词,会简单对话,自主对话不行怎么办?是否要加强英文对话?
  2. 新加硬盘但计算机里找不着,电脑开机找不到硬盘怎么办
  3. 13部成功预知未来科技的科幻电影
  4. 钢铁切削液及油-市场现状及未来发展趋势
  5. crmeb多商户2.0正式版 新增DIY、PC端客服、同城配送平台等完整包下载更新包下载
  6. 连载《国培计划》骨干教师的研修日志之七:N个老师的日志
  7. 达人评测 酷睿i7 1195g7和i7 1260p对比选哪个
  8. Html 实现角标效果
  9. vue : 无法加载文件 C:\Users\xxx\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本
  10. K8s学习(二)——核心组件