(小写金额转换为大写金额C实现.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(小写金额转换为大写金额C实现

前言   银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确、及时和安全。票据和结算凭证是银行、单位和个人凭以记载帐务的会计凭证,是记载经济业务和明确经济责任的一种书面证明。因此,填写票据和结算凭证,必须做到标准化、规范化,要要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。   我的服务需要一个金额转换过程,本来想在网上找,但都是C++、JavaScript、Delphi的Demo,还没有C的。索性自己写一个。参考了其它的转换算法,对我有些启发。   大多的算法都是直接分析字符串生成大写金额,即存在一个假设:源字符串的格式是正确的。在我的过程中,用状态机的方法分析源字符串,错误时,返回空指针(我可不敢保证传给我的过程的都是##.##)。 分析出源字符串中整数部有多少个数字,是否有小数,统计结果放在一个结构体中,整数和小数部分的数字分别放在两个整形数组里。   有了统计数据就可以生成大写金额了。转换过程有个难点:要区分万、亿等“段”,特别是个位这个“段”,这个概念是在《小写转大写金额在C++中的实现》文章中提到的。在下面的程序中用j= ( size - i - 1 ) 0x3,实际上是j = ( size - i - 1 ) % 4取模,j==0时为段尾,需要特殊处理。所有的处理都是围绕0来进行的,也就是说,0才是难点。   特殊位置的0,按段分,段中第一个非0数字前的0,可能有多个;段中两个非0数字间的0;段尾的0;个位的0;十分位,角位置的0。   另外,转换的一个重点是大写金额的写法,好像大多的算法都注重转换过程而对这个问题没有深究。我在文章后面附上转换规则。 下面是代码 /** * @brief 将源字符串中的小写金额转换为大写格式 * * @param dest 目的字符串 * @param src??小写金额字符串 * @return * - NULL 源字符串的格式错误,返回NULL * - 非NULL 目的字符串的首地址 * @note 转换根据:中国人民银行会计司编写的必威体育精装版《企业、银行正确办理支付结算 *? ?? ? 指南》的第114页-第115页 */ char* chineseFee( char* dest, char* src ) { ? ? enum ? ? { ? ?? ???START,? ?? ?? ?? ?? ???//开始 ? ?? ???MINUS,? ?? ?? ?? ?? ???//负号 ? ?? ???ZEROINT,? ?? ?? ?? ?? ?//0整数 ? ?? ???INTEGER,? ?? ?? ?? ?? ?//整数 ? ?? ???DECIMAL,? ?? ?? ?? ?? ?//小数点 ? ?? ???DECIMALfRACTION,? ?? ? //小数位 ? ?? ???END,? ?? ?? ?? ?? ?? ? //结束 ? ?? ???ERROR? ?? ?? ?? ?? ?? ?//错误 ? ? } status = START; ? ? struct ? ? { ? ?? ???int minus;? ?? ?? ?? ? //0为正,1为负 ? ?? ???int sizeInt; ? ?? ???int sizeDecimal; ? ?? ???int integer[10]; ? ?? ???int decimal[10]; ? ? } feeInfo; ? ? char* NumberChar[] = ? ?? ???{ 零, 壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖 }; ? ? char* UnitChar[] = ? ?? ???{ 整, 圆, 拾, 佰,仟, 万, 拾, 佰, 仟, 亿, ? ?? ?? ? 拾, 佰, 仟, 万亿, 拾, 佰, 仟, 亿亿, ? ?? ?? ? 角, 分, 负, 人民币 }; ? ?? ?? ? ? ? int? ?? ?i, j,size;? ?? ?? ?? ? //循环变量 ? ? int? ?? ?zeroTag? ?? ???= 0,? ? //0标志 ? ?? ?? ?? ? decZeroTag? ???= 0; ? ?? ? ? ? char*? ? pDest? ?? ?? ? = dest; ? ? char*? ? pSrc? ?? ?? ???= src; ? ? ? ? int*? ???pInt? ?? ?? ???= feeIeger; ? ? int*? ???pDec? ?? ?? ???= feeInfo.decimal; ? ? ? ? //初始化 ? ? feeInfo.sizeIn

文档评论(0)

junjun37473 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档