b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

[算法]大写转换(阿拉伯语和中文转换)

电脑杂谈  发布时间:2020-05-03 21:08:22  来源:网络整理

货币金额大写转换_大小写金额转换_货币金额大小写转换

我在一次采访中遇到一个有趣的小算术问题: 请求将阿拉伯数字转换为汉字(包括单位).

尽管当时已实现,但代码有些混乱. 所以回家后,我重新整理了.

此算法有几个小注意事项:

1,汉字占用两个字节货币金额大小写转换,因此,如果使用C语言,则需要以char数组的形式保存单个汉字.

2. 如果数字中出现连续的零,则需要用一个零代替.

3. 十亿,数万和前面的汉字不能为零(由读取方法确定).

4. 双精度值可以分为整数部分和小数部分. 小数部分相对简单,整数部分需要根据数字所在的位数匹配相应的单位.

具体方法是: 设置一个单位映射字符串表g_strUnit,它可以看作是一个简单的HashTable. 然后从头开始读取每个整数字符串

字符,如果此字符在整数字符串中的位置为i,则此字符后面的单位为g_strUnit [length-1-i].

代码如下

/ ************************************************** ****************************************

ProjectCode: 帐户

文件名:

作者: 拿铁

说明: 将阿拉伯数字转换为中文字符串

FunctionList:

--------------------------------------------------- ---------------------------------

历史记录:

DateAuthorModification

20140703Lattecreatedfile.

*********************************************** ************************************ /

#include“ stdafx.h”

#include

#include

usingnamespacestd;

#defineMAX100

stringg_strDigit [] = {“零”,“一个”,“两个”,“三个”,“旺”,“吴”,“鲁”,“柒”,“捌”货币金额大小写转换,“玖”}; <

stringg_strUnit [] = {“圆形”,“拾取”,“ bai”,“ qian”,“ wan”,“ pickup”,“ bai”,“ qian”,“ billion”,

“代答”,“白”,“千”,“万”,“代答”,“白”}}

stringg_strUnit2 [] = {“角”,“分”};

/ ************************************************** ****************************************

FuncName: ReplaceSubStr

货币金额大写转换_大小写金额转换_货币金额大小写转换

创建日期: 2014-07-03

作者: 拿铁

说明: 将与strSub匹配的源字符串strOrig的第一个子字符串部分替换为strReplace

输入:

string&strOrig,

stringstrSub,

stringstrReplace

输出:

string&strOrig

返回:

int

警告: 如果返回值为-1,则表示替换失败或找不到替换项

*********************************************** ************************************ /

intReplaceSubStr(字符串和strOrig,stringstrSub,stringstrReplace)

{

intpos =(int)strOrig.find(strSub);

intlength =(int)strSub.length();

如果(pos> = 0)

{

strOrig.replace(位置,长度,strReplace);

return0;

}

return-1;

}

/ ************************************************** ****************************************

FuncName: NumToChineseStr

创建日期: 2014-07-03

作者: 拿铁

说明:

将双值转换为中文字符串

输入:

doublemoney

货币金额大写转换_大小写金额转换_货币金额大小写转换

输出:

返回:

字符串

警告:

*********************************************** ************************************ /

stringNumToChineseStr(doublemoney)

{

inti = 0;

intret = 0;

intlength = 0;

char * p = NULL;

char * pcDecimal = NULL; //保存小数部分字符

charczNumber [MAX] = {0}; //保存全部字符

stringstrResult;

cout <<“ =================================== << << endl;

cout << money << endl;

//确定是否为小数

如果(钱<0)

{

strResult =“不支持读取负数”;

returnstrResult;

}

///使用sprintf_s常规转换将数字转换为数字字符串

sprintf_s(czNumber,MAX,“%. 15lg”,money);

printf(“ [[No.0]%s \ n”,czNumber);

//如果数字太大或太小,因为已经转换为科学计数法,它将包含e字符

p = strchr(czNumber,'e');

如果(NULL!= p)

{

strResult =“不支持读数太大或太小的数字”;

returnstrResult;

}

货币金额大写转换_大小写金额转换_货币金额大小写转换

p = strchr(czNumber,'. ');

如果(NULL!= p)

{

p [0] = 0;

pcDecimal = p +1;

}

length =(int)strlen(czNumber);

for(i = 0; i

{

if('0'== czNumber [i] && 0!=((length-1-i)%4))

{

strResult + = g_strDigit [czNumber [i]-'0'];

}

其他

{

strResult + = g_strDigit [czNumber [i]-'0'] + g_strUnit [length-1-i];

}

}

cout <<“ [[No.1]直接用汉字替换数字: \ n” << strResult << endl;

///将strResult中的所有“零零”子字符串替换为“零”

同时(1)

{

ret = ReplaceSubStr(strResult,“零零”,“零”);

如果(ret <0)

{

休息;

}

}

cout <<“ [[No.2]将所有零替换为零: \ n” << strResult << endl;

ReplaceSubStr(strResult,“零亿”,“十亿”);

ReplaceSubStr(strResult,“零”,“一万”);

if(strResult!=“零圆”)//如果整数部分全为0,请不要删除元单元前面的零

货币金额大小写转换_大小写金额转换_货币金额大写转换

{

ReplaceSubStr(strResult,“零圆”,“圆”);

}

cout <<“ [[No.3]删除零个,零个和零个圆之前的零: \ n” << strResult << endl;

//十进制精确到两位数,即精确到单位分钟

如果(NULL!= pcDecimal)

{

//如果小数部分具有数字值且整数部分为0,则删除字符串中的零元素

if(strResult ==“零圆”)

{

strResult.clear();

}

i = 0;

同时(1)

{

如果(0 == pcDecimal [i] || i> = 2)

休息;

strResult + = g_strDigit [pcDecimal [i]-'0'] + g_strUnit2 [i];

i ++;

}

}

cout <<“ [[No.4]十进制精确到两位数,精确到单位: \ n” << strResult << endl;

returnstrResult;

}

intmain(无效)

{

// cout <<“结果: ” << NumToChineseStr(0.00)<< endl;

// cout <<“结果: ” << NumToChineseStr(-345.67)<< endl;

// cout <<“结果: ” << NumToChineseStr(1000.0)<< endl;

cout <<“结果: ” << NumToChineseStr(130040600090.012)<< endl;

return0;

}

结果


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shouji/article-197884-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...