首页 > 试题

大写123

更新时间:2022-12-02 17:10:39 阅读: 评论:0

我本 初高中上部-排球网高度


2022年12月2日发(作者:瑜伽大全)

将数字转为中⽂⾦额的⼤写⽅式(C++版)

1./**

2.*程序⽬的:

3.*从命令⾏接收⼀个数,并将其转化为中⽂⾦额的⼤写⽅式(C++版)

4.*例如123.45-->壹佰贰拾叁元肆⾓伍分

5.*@authorLovinChan

6.*

7.*前⼀段时间做了个Java版的。突然有天⼼⾎来潮做个C++版本的,实现的功能

8.*跟Java版本的没什么区别,不过由于我对C++的了解还不是很多,还是学习阶段,

9.*写出来的东西还有很多问题和不合规范的地⽅,希望各位批评指出来。

10.*

11.*程序的注释我尽量写得详细⼀点,如果觉得这个程序哪⾥有问题或者是哪⾥有改进的

12.*地⽅欢迎随时跟我交流。

13.*

14.*我附上了编译以后的.exe⽂件跟.bat⽂件,还有项⽬源码,供⼤家测评。

15.*

16.*⼯具:MicrosoftVisualStudio2005

17.*编译环境:MicrosoftVisualStudio2005

18.*

19.*我的msn:@

20.*QQ:372133556(注上为什么加我就可以了)

21.*我的blog:/egg_chen

22.*欢迎交流

23.*/

24.#include

25.#include

26.

amespacestd;

28.

29.//表⽰整数部分的标志

ntINT_ONLY=1;

31.//表⽰⼩数部分的标志

ntSMALL_ONLY=2;

33.

34./**

35.*从命令⾏接收⼀个数,在其中调⽤checkNum()⽅法对其进⾏

36.*验证,并返回相应的值

37.*@return如果输⼊合法,返回输⼊的这个数

38.*/

getNum(){

s;

<<"请输⼊⼀个数字(精确到⼩数点后两位):"<

42.//从命令⾏输⼊这个浮点数

>>s;

44.//清除输⼊流状态标志

();

s;

47.}

48.

49./**

50.*判断⽤户输⼊的数据是否合法,⽤户只能输⼊⼤于零的数字,不能输⼊其它字符

51.*@paramsstring

52.*@return如果⽤户输⼊数据合法,返回true,否则返回fal

53.*/

eckNum(strings){

55.//atof(s.c_str())⽅法的功能是将字符串s转换成⼀个双精度数值并返回结果

d=atof(s.c_str());

57.//只有当⽤户输⼊⼀个⼤于0的数时,才会返回true

(d>0){

true;

60.}

fal;

62.}

63.

64./**

65.*对传⼊的数进⾏四舍五⼊操作

66.*@paramsstring,从命令⾏输⼊的那个数

67.*@return四舍五⼊后的新值

68.*/

roundString(strings){

70.//将这个数转换成double类型,并对其进⾏四舍五⼊操作

71.//先转换这个数的整数部分

72.//atof(s.c_str())⽅法的功能是将字符串s转换成⼀个双精度数值并返回结果

73.//c_str()函数返回⼀个指向正规C字符串的指针,内容与本字符串相同

d=atof(s.c_str());

75.//将这个数进⾏四舍五⼊,保留到⼩数点后两位

76.//再将这个数转换成字符串,等待转换

,sign;

78.//注意:当这个数转换成字符串以后不会显⽰⼩数点,并且会以四舍五⼊的形式只保留⼩数点后两位

79.s=fcvt(d,2,&dec,&sign);

80.//规定数值的最⼤长度只能是15位(到万亿位)

(()>15){

<<"输⼊数据过⼤!(整数部分最多13位!)"<

"";

84.}

s;

86.}

87.

88./**

89.*把传⼊的数转换为中⽂⾦额⼤写形式

90.*@paramflagint标志位,1表⽰转换整数部分,0表⽰转换⼩数部分

91.*@paramsstring要转换的字符串

92.*@return转换好的带单位的中⽂⾦额⼤写形式

93.*/

formatChine(intflag,strings){

ngth=();

96.//货币⼤写形式

bigLetter[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

98.//货币单位

unit[]={"元","拾","佰","仟","万",

100.//拾万位到仟万位

101."拾","佰","仟",

102.//亿位到万亿位

103."亿","拾","佰","仟","万"};

small[]={"分","⾓"};

105.//⽤来存放转换后的新字符串

newS="";

107.//逐位替换为中⽂⼤写形式

(inti=0;i

(flag==INT_ONLY){

110.//转换整数部分为中⽂⼤写形式(带单位)

=newS+bigLetter[(i)-48]+unit[sLength-i-1];

112.}elif(flag==SMALL_ONLY){

113.//转换⼩数部分(带单位)

=newS+bigLetter[(i)-48]+small[sLength-i-1];

115.}

116.}

newS;

118.}

119.

120./**

121.*把⽤户输⼊的数以⼩数点为界分割开来,并调⽤numFormat()⽅法

122.*进⾏相应的中⽂⾦额⼤写形式的转换

123.*注:传⼊的这个数应该是经过roundString()⽅法进⾏了四舍五⼊操作的

124.*@paramsstring

125.*@return转换好的中⽂⾦额⼤写形式的字符串

126.*/

splitNum(strings){

128.//如果传⼊的是空串则继续返回空串

(""==s){

"";

131.}

132.//截取输⼊数字的整数部分

intOnly=(0,()-2);

intPart=formatChine(1,intOnly);

135.

136.//截取这个数的⼩数部分

smallOnly=(()-2,());

smallPart=formatChine(2,smallOnly);

139.

140.//把转换好了的整数部分和⼩数部分重新拼凑⼀个新的字符串

newS=intPart+smallPart;

142.

newS;

144.}

145.

146./**

147.*使⽤给定的replacement替换此字符串所有匹配给定的regex的⼦字符串。

148.*@paramsrc-待操作的源字符串

149.*@paramregex-⽤来匹配此字符串的正则表达式

150.*@paramreplacement-⽤来替换每个匹配项的字符串

151.*@return替换后的字符串

152.*/

replaceAll(stringsrc,stringregex,stringreplacement){

gth=();

((regex)<()){

156.//替换src字符串中从第⼀个匹配regex的字符串索引开始的length个字符为replacement字符串

e((regex),length,replacement);

158.}

src;

160.}

161.

162./**

163.*把已经转换好的中⽂⾦额⼤写形式加以改进,清理这个字

164.*符串⾥⾯多余的零,让这个字符串变得更加可观

165.*注:传⼊的这个数应该是经过splitNum()⽅法进⾏处理,这个字

166.*符串应该已经是⽤中⽂⾦额⼤写形式表⽰的

167.*@paramsstring已经转换好的字符串

168.*@return改进后的字符串

169.*/

cleanZero(strings){

171.//如果传⼊的是空串则继续返回空串

(""==s){

"";

174.}

175.//字符串中存在多个'零'在⼀起的时候只读出⼀个'零',并省略多余的单位

176./*由于本⼈对算法的研究太菜了,只能⽤4个正则表达式去转换了,各位⼤虾别介意哈...*/

regex1[]={"零仟","零佰","零拾"};

regex2[]={"零亿","零万","零元"};

regex3[]={"亿","万","元"};

regex4[]={"零⾓","零分"};

181.

182.//第⼀轮转换把"零仟",零佰","零拾"等字符串替换成⼀个"零"

(inti=0;i<3;i++){

184.s=replaceAll(s,regex1[i],"零");

185.}

186.//第⼆轮转换考虑"零亿","零万","零元"等情况

187.//"亿","万","元"这些单位有些情况是不能省的,需要保留下来

(inti=0;i<3;i++){

189.//当第⼀轮转换过后有可能有很多个零叠在⼀起

190.//要把很多个重复的零变成⼀个零

191.s=replaceAll(s,"零零零","零");

192.s=replaceAll(s,"零零","零");

193.s=replaceAll(s,regex2[i],regex3[i]);

194.}

195.//第三轮转换把"零⾓","零分"字符串省略

(inti=0;i<2;i++){

197.s=replaceAll(s,regex4[i],"");

198.}

199.//当"万"到"亿"之间全部是"零"的时候,忽略"亿万"单位,只保留⼀个"亿"

200.s=replaceAll(s,"亿万","亿");

s;

202.}

203.

n(){

<<"n------------将数字转换成中⽂⾦额的⼤写形式(C++)------------n"<

s=getNum();

(checkNum(s)){

208.s=roundString(s);

209.s=splitNum(s);

210.s=cleanZero(s);

<<"转换成中⽂后为:"<

212.}el{

<<"⾮法输⼊,程序即将退出"<

214.}

<<"n--------------------------------------------------------------"<

216.}

本文发布于:2022-12-02 17:10:39,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/88/39133.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:排队英文
标签:大写123
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图