用C语言写中文数字字符串转数值变量.docVIP

用C语言写中文数字字符串转数值变量.doc

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

用C语言写中文数字字符串转数值变量 C语言写中文数字字符转数值变量   最近突发奇想:程序中要是输入一串中文数字,如“十万”就能自动识别转换成数值100000储存到变量里该多好。   也许你会说,那很简单啊,先将中文字符分开,再各自识别成数值,最后乘上位数相加就行了。可是实际操作时你会发现这并不容易。比如“一亿三千五百万”中,如何确定“三”属于千万位的?或者我想让程序更智能化一些,同时实现如“一百三十”=“一三零”=“1百3”=“百三”=130,那就不会那么简单了。   为了实现这一转换,可以按以下思路编写:   1.可以用两个数组分别储存单位和每个单位对应的数字。其中不同的单位用不同的数值标识。再记录下下标长度。   2.然后将输入的中文数字整理成这种形式:*万*百*个。其中*代表一个正整数(可以大于10),万、百、个代表单位。比如:“一亿五十六万三千”整理成1亿56万3千。这个过程最好使用递归。接着可以将数值相乘叠加。   3.最后,为了处理如“二百五”=250的情况,还要检索下“百”位后是否还有“零”。 下面给出详细代码以供参考: #define MAX 32 //先定义支持的中文符号:(单位数值由小到大排列,方便判断单位和数值大小) char _NUMBER[59]=零一壹二贰三叁四肆五伍六陆七柒八捌九玖十拾廿百佰千仟万兆亿; //递归辅助函数, double _Num(double *num,char *wei,char len)//参数分别对应按字符识别好的数字,位,位数 { double i, a, tmp;//临时数字 char w;//用来作位数指针 char c;//临时指针 char x;//临时指针 w = len - 1; //下面检测从右到左,单位大小是否由小变大,如“五千万五千”的单位顺序就不是 while(w0) { if(*(wei+w-1) = *(wei+w)) //检测到左边单位≤右边单位 { c = w;//记录右边单位在wei中的位置 w--; //下面检索到左边单位比右边单位大为止 while(*(wei+w-1)=*(wei+c) w) w--; //中间c-w个单位进行递归整合成一个数值,这个数值属于c记录的单位 *(num+w) = _Num(num+w,wei+w,c-w) + *(num+c); len = len - c + w;//单位数减少,有c-w个单位整合成一个数值了 //下面要将原来c记录的右边的单位及其数值进行左移 for(x=w+1;xlen;x++) //移动数值 *(num+x) = *(num+x+c-w); for(x=w;xlen;x++)//移动位 *(wei+x) = *(wei+x+c-w); } w--; } //经过上面处理之后,单位排列的顺序从左到右将是由大到小的,我们就可以放心处理了 a = 0;//临时计算用数 c = 0; while(clen)//计算 { tmp = *(num+c);//计算出的单位数值 switch(*(wei+c))//识别单位序号 { case 10: i = 10;break;//对应“十” case 11: i = 20;break; //对应“廿” case 12: i = 100;break; //对应“百” case 13: i = 1000;break; //对应“千” case 14: i = 10000;break; //对应“万” case 15: i = 1000000;break; //对应“兆” case 16: i = 100000000;break; //对应“亿” default : i = 1;//对应个位 } if(tmp) a = a + i*tmp; else if(*(wei+c))

文档评论(0)

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

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

1亿VIP精品文档

相关文档