文章介绍了使用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(w>0)

{

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;x

*(num+x) = *(num+x+c-w);

for(x=w;x&

lt;len;x++)//移动位

*(wei+x) = *(wei+x+c-w);

}

w--;

}

//经过上面处理之后,单位排列的顺序从左到右将是由大到小的,我们就可以放心处理了

a = 0;//临时计算用数

c = 0;

while(c

c语言中用中文转化数字,用C语言写中文数字字符串转数值变量相关推荐

  1. c语言数字储存于变量,用C语言写中文数字字符串转数值变量

    用C语言写中文数字字符串转数值变量 C语言写中文数字字符转数值变量 最近突发奇想:程序中要是输入一串中文数字,如"十万"就能自动识别转换成数值100000储存到变量里该多好. 也许 ...

  2. html数字拼图游戏,JavaScript_JS写的数字拼图小游戏代码[学习参考],复制代码 代码如下:html - phpStudy...

    JS写的数字拼图小游戏代码[学习参考] 复制代码 代码如下: 拼图 td.numTd{ width : 20px ; height : 20px ; } div.numDiv{ width : 100 ...

  3. C语言中用函数实现录入信息模块,C语言程序设计用函数实现模块化程序设计(73页)-原创力文档...

    31/73 #include void main ( ) { int n, p; printf ( =?);scanf (%d, &n); p = fact (n); printf (%d!= ...

  4. C语言中用链表构建栈讲解,C语言数据结构之使用链表模拟栈的实例

    C语言数据结构之使用链表模拟栈的实例 以下是"使用链表模拟栈"的简单示例: 1. 用C语言实现的版本 #include #include typedef char datatype ...

  5. c语言中用rgb改颜色字体,C语言颜色转换宏

    C语言颜色转换宏 #define COLOR_BPP16_RGB555 /* Win RGB */ #define COLOR_RGB(r,g,b) ((COLORREF)(((BYTE)(r)|(( ...

  6. c语言中用指针的必要性,浅析C语言使用指针的必要性.pdf

    第 21 卷第 8 期长春大学学报Vol 21No 8 2011 年 8 月 JOURNAL OF CHANGCHUN UNIVERSITYAug 2011 收稿日期 2011 06 20 作者简介 ...

  7. C语言整数怎么转化为浮点数,C语言浮点数和整数转换的分析

    这里以C语言的浮点数为例,在IEEE浮点标准下,整数转换为浮点数的过程做一些直观的分析和具体的实现,IEEE浮点数的标准细节详见(). 在C语言中,使用float和double类型数据分别对应单精度和 ...

  8. c语言acii 码转化为字母,C语言字符转换ASCII码

    满意答案 mxwpy 2014.03.05 采纳率:59%    等级:8 已帮助:614人 //函 数 名:CharToHex() //功能描述:把ASCII字符转换为16进制 //函数说明: // ...

  9. 在c语言中用冒泡法比较大小,c语言大小排序,用冒泡法和选择排序法

    满意答案 先上选择法和冒泡法: 1.选择法 #include void main() { int i,j,min,temp; int a[10]; printf("请输入十个整数:" ...

  10. 时钟数字 java_用java写一个数字时钟

    2017/07/31 日常笔记记录--模仿一本教科书上的实例-- 程序最终实现了: 1.能够实现每一秒中更新一次画面,给人的感觉就是时钟一直在走: 2.底部的数字时间也能每隔一秒更新显示一次. 3.时 ...

最新文章

  1. 程序编译是出现field has incomplete type问题的解决
  2. MySQL数据库安装与Navicat Premium 12 安装与破解
  3. apache URL重写
  4. 软件开发的MVC构架
  5. vue 微信开发工具 Maximum call stack size exceeded
  6. pg订阅oracle修改,PostgreSQL修改数据库timezone
  7. 技巧 | 如何使用R语言的基础绘图系统的拼图功能
  8. 蓝桥杯2021国赛太原理工大学获得14枚奖牌
  9. 市场热门身份证识别性能测评对比
  10. 明日方舟泰拉世界解析
  11. DNS服务器ttl修改不生效,中科三方DNS专家手把手教学——定位域名解析不生效问题...
  12. 排列组合C几几怎么算
  13. Microsoft SQL Server 2008 MDX Step by Step中关于MDX Step-by-Step.abf损坏文件的处理
  14. idea新建maven工程没有artifacts
  15. 全面屏的 iPhone X,雷军妥协的库克做到了
  16. 自学本科计算机课程要多久,22岁完全0基础自考计算机本科是否现实?
  17. 从应用到平台 – 云服务架构的演进过程
  18. C# P3色域计算、计算色域覆盖率、已知坐标求多边形面积计算、已知两条线的坐标求交点计算、坐标顺时针排序计算
  19. 嵌入式系统开发09——串口通信
  20. 无意间发现我的一台云服用器中了矿机xmrig的毒,哎!!

热门文章

  1. 我为什么不要应届毕业生
  2. 微信小说,微信游戏系统域名被屏蔽是怎么回事
  3. linux桌面lxde 安装_Ubuntu怎么安装轻量级的LXDE桌面?
  4. 隐藏OEM分区的解决办法和推荐的清理磁盘的方法
  5. 爱快iKuai 安装成功后运行提示程序运行中解决办法
  6. Windows 10 版本 1507 中的新 AppLocker 功能
  7. 浅谈JSP的发展历史
  8. 微信新表情真的太骚了!!
  9. 云社区博客博客详情火瞳智慧通行助力疫情防控及安全出行
  10. html中重叠盒子之间的距离,div间距设置_div之间距离设置布局