c语言数字储存于变量,用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(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<len;x++) //移动数值

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

for(x=w;x<len;x++)//移动位

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

}

w--;

}

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

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

c = 0;

while(c<len)//计算

{

tmp = *(num+c);//计算出的单位数值

switch(*(wei+c))//识别单位序号

{

case 10: i = 10;break;//

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务微应用的安全测试_提高微服务安全性的11个方法

1.通过设计确保安全设计安全&#xff0c;意味着从一开始就应该将安全性纳入软件设计中。关于安全&#xff0c;其中最常见的一个威胁就是恶意字符。我问我的朋友罗伯温奇(Rob Winch)他对删除恶意字符的想法。Rob是Spring Security项目的负责人&#xff0c;被广泛认为是安全专家。…

密度图的密度估计_箱形图、小提琴图、直方图……统统可以卡通化!

全文共11345字&#xff0c;预计学习时长23分钟或更长对于数据科学家来说&#xff0c;可视化工具比比皆是&#xff0c;因此&#xff0c;退一步去钻研每种可视化的类型及其适用的最佳案例就变得十分重要。为了发挥工具的最佳效用&#xff0c;有时可以考虑将其拟人化&#xff0c;甚…

android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度

为什么要适配&#xff0c;适配的好处等等这里就不说了&#xff0c;直接说我们要怎么适配&#xff0c;请看下面的内容。1.重要概念px&#xff1a;pixel&#xff0c;像素Android原生API&#xff0c;UI设计计量单位&#xff0c;如获取屏幕宽高。屏幕分辨率&#xff1a;指在纵向和横…

操作系统锁的实现方法有哪几种_「从入门到放弃-Java」并发编程-锁-synchronized...

简介上篇【从入门到放弃-Java】并发编程-线程安全中&#xff0c;我们了解到&#xff0c;可以通过加锁机制来保护共享对象&#xff0c;来实现线程安全。synchronized是java提供的一种内置的锁机制。通过synchronized关键字同步代码块。线程在进入同步代码块之前会自动获得锁&…

cocos2dx标准容器_cocos2dx[3.2](24)——内存管理机制

【唠叨】整合参考文档。【参考】【内存管理机制】在3.x版本&#xff0c;Cocos2d-x采用全新的根类 Ref&#xff0c;实现Cocos2d-x 类对象的引用计数记录。引擎中的所有类都派生自Ref。1、引用计数Cocos2d-x 提供引用计数管理内存。> 调用 retain() 方法 &#xf…

android长按加入购物车,《Android APP可能有的东西》之UI篇:加入购物车动画

很多电商app的加入购物车的动作会要求加上动画效果&#xff1a;飞进购物车&#xff0c;想来也合理&#xff0c;在listview界面时商品快速加入购物车&#xff0c;一直toast用户加入成功好像不太正常&#xff0c;所以添加一个动画&#xff0c;用户自然就懂了&#xff0c;而且也挺…

python里的shell是什么_python中的shell操作

http://blog.csdn.net/meng_tianshi/article/details/6682317 首先介绍一个函数&#xff1a; os.system(command) 这个函数可以调用shell运行命令行command并且返回它的返回值。试一下在python的解释器里输入os.system(”ls-l”)&#xff0c;就可以看到”ls”列出了当前目录下的…

基于android 定位系统,基于Android平台定位系统设计和实现

2 0 1 3牟第 1 2期文章编号&#xff1a; 1 0 0 9— 2 5 5 2 ( 2 0 1 3 ) 1 2— 0 1 8 7— 0 4 中图分类号&#xff1a; T P 3 1 6 . 8 9 文献标识码&#xff1a; A基于 A n d r o i d平台定位系统设计和实现李瑞宣&#xff0c;王山东&#xff0c;徐志远&#xff0c;王伶俐(河海…

集合竞价如何买入_集合竞价买入法 如何在集合竞价中买入股票?

集合竞价买入法、 如何在集合竞价中买入股票&#xff1f;要想集合竞价买入涨停板&#xff0c;要做到如下3点&#xff1a;快、准、狠&#xff01;文章将为你盘点这几个方法的具体做法&#xff0c;希望对股民有所帮助。快&#xff1a;就是利用9&#xff1a;15-9&#xff1a;25这1…

python 公众号爬虫_python_爬虫_微信公众号抓取

importrequests,pymysqlimportjson,jsonpath,random,re,time,datetime,os,imghdrfrom lxml importetreefrom selenium importwebdriverfrom urllib importrequestimportssl ssl._create_default_https_contextssl._create_unverified_context注意点&#xff1a;如果同一时间内刷…

开发工评价程师自我_常见“自我评价”写作范例

“自我评价”在找工作的时候是一个非常重要的内容&#xff0c;优秀的“自我评价”不仅就可以让别人对你有一个全面的认识&#xff0c;更可以通过寥寥数语就让别人对你产生浓厚的兴趣&#xff0c;让你的求职之路事半功倍。但是怎么写“自我评价”&#xff0c;却是让很多人犯愁的…

android调用服务器端口,更改运行adb服务器的默认端口(即5037)

使用环境variablesANDROID_ADB_SERVER_PORT选择端口。以下在bash下工作&#xff1a;$ export ANDROID_ADB_SERVER_PORT12345 $ adb start-server * daemon not running. starting it now on port 12345 * * daemon started successfully * $ adb devices List of devices attac…

visual studio 调试python_Visual Studio Code Python 调试设置

很意外Visual Studio Code居然支持Python代码的断点调试。一起来配置一下。工具/原料 Visual Studio Code 1.1 Python 2.7.11 方法/步骤 1 首先&#xff0c;当然是要先安装插件&#xff0c;配置Python环境。这个大家看这个文章 2 环境配置完成后&#xff0c;我们点击调试按钮&a…

cad图纸比对lisp_CompareDWG|CAD图纸比较软件(CompareDWG)下载v2018 官方版 - 欧普软件下载...

CompareDWG是一款免费的CAD图纸比较软件&#xff0c;可以帮助用户快速找到两个dwg图像之间的差异&#xff0c;使用不同的颜色进行标注&#xff0c;生成详细的报表&#xff0c;相比人工查找效率更高&#xff0c;准确率也高&#xff0c;支持几乎所有的autocad版本&#xff0c;适用…

android 电话 快捷键,Android studio开发常用快捷键详解

最常用快捷键1.Ctrl&#xff0b;E可以显示最近编辑的文件列表2.Shift&#xff0b;Click(点击)可以关闭文件3.Ctrl&#xff0b;[或者ctrl]可以跳到大括号的开头结尾4.Ctrl&#xff0b;Shift&#xff0b;Backspace可以跳转到上次编辑的地方5.Ctrl&#xff0b;F12可以显示当前文件…

leetcode c程序总提示主函数_Matlab系列之函数嵌套

昨天的那一篇讲的几个函数&#xff0c;不知道你们理解的如何&#xff0c;是否懂得怎么去使用了&#xff0c;如果还没懂&#xff0c;一定要再多看几遍&#xff0c;并且去在软件上进行实操&#xff0c;今天的话&#xff0c;将要介绍一下函数的嵌套&#xff0c;不过在正式讲嵌套之…

alibab仓库 idea_01.微服务架构编码、构建

教学视频传送&#xff1a;springBoot和springCloud的版本选型https://start.spring.io/actuator/info查看json串返回结果这就是我们的选型依据本次开发选用版本如下&#xff1a;cloud : Hoxton.SR1boot : 2.2.2.RELEASEcloud alibaba : 2.1.0.RELEASEjava …

华为手机出现android啥意思,传华为正研发手机系统,如果脱离安卓系统,还有啥能阻止华为前进...

原标题&#xff1a;传华为正研发手机系统&#xff0c;如果脱离安卓系统&#xff0c;还有啥能阻止华为前进自从国产手机正式进入了智能手机时代之后&#xff0c;中华酷联的中兴、酷派、联想早已经被华为甩在了身后。虽然现在国产手机已经呈现出华为、小米、OPPO、vivo四足鼎立的…

sql 数据库前两列值乘_Sql语句常用关键字

最近接触sql比较多&#xff0c;发现自己已经遗忘的也差不多&#xff0c;要用到的时候迟迟拿不出来&#xff0c;今天开始会在知乎上纪录一些sql语句学习的内容&#xff0c;内容重在说明查询语句的用法。一、sql查询语句的初始介绍1、查询语句的一般写法&#xff1a;select .....…

kayui进行添加_关于layui 实现点击按钮添加一行(方法渲染创建的table)

目标&#xff1a;layui 实现点击按钮添加一行解决方案&#xff1a;方案1、table 是用转换静态表格的方式创建的&#xff0c;写一个button&#xff0c;每次点击按钮&#xff0c;就添加一个 标签&#xff1b;方案2、table 是用方法渲染的方式创建的&#xff0c;写一个button,每次…