首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

将数字字符串转化作大写汉字金额

2012-09-16 
将数字字符串转化为大写汉字金额//

将数字字符串转化为大写汉字金额

//============================================================================  // 作者   : quarryman// 邮箱   : quarrying@qq.com// 链接   : http://blog.csdn.net/quarryman// 描述   : 将数字字符串转化为大写汉字金额// 日期   : 2012年9月2日//============================================================================#include <string>#include <locale>#include <iostream>using namespace std;wstring a[]={L"零",L"壹",L"贰",L"叁",L"肆",L"伍",L"陆",L"柒",L"捌",L"玖"};wstring c[]={L"圆",L"拾",L"佰",L"仟",L"萬",L"億"};wstring e[]={L"角",L"分",L"厘",L"毫"};void reverse(wstring& s){wchar_t c;int len=s.length();for(int i=0,j=len-1;i<j;++i,--j){c=s[i];s[i]=s[j];s[j]=c;}}wstring zhuanhuan2(wstring input){wstring output;int length=input.length();//四位数字的汉字化if(length<=4){for(int i=0;i<length;++i){wstring s=a[input[i]-'0'];//个位不加单位//个位值为零不计//位值为零不加单位//连续的零合并为一个零if(i!=0 && s!=L"零"){output+=c[i%4]+s;}else{if(i==0){if(s!=L"零"){output+=s;}}else if(s==L"零"){if(output[output.length()-1] !=L'零'){output+=s;}}}}}else{wstring str1=input.substr(0,4);wstring out1=zhuanhuan2(str1);wstring str2=input.substr(4,length);wstring out2=zhuanhuan2(str2);output+=out1+L"萬"+out2;}return output;}wstring zhuanhuan_zhengshu(wstring input){wstring output;wstring suffix;wstring temp;int length=input.length();//将数字串逆序reverse(input);//按八位分划for(int i=0;i<=length/8;++i){if(8*i+7<length){temp=input.substr(8*i,8*i+7);}else{temp=input.substr(8*i);}//八位数字的汉字化wstring str=zhuanhuan2(temp);suffix+=L"億";output+=str;if(i!=length/8){output+=suffix;}}reverse(output);return output;}wstring zhuanhuan_xiaoshu(wstring input){wstring output;int length=input.length();for(int i=0;i<length;++i){if(i<4){output+=a[input[i]-'0']+e[i];}else{output+=a[input[i]-'0'];}}return output;}wstring zhuanhuan(wstring input){wstring output;int pos=input.find(L".");if(pos!=wstring::npos){wstring int_part=input.substr(0,pos);wstring int_out=zhuanhuan_zhengshu(int_part);wstring fra_part=input.substr(pos+1);wstring fra_out=zhuanhuan_xiaoshu(fra_part);output=int_out+L"圆"+fra_out;}else{output=zhuanhuan_zhengshu(input);output+=L"圆整";}return output;}int main(){locale loc( "chs" );wcout.imbue( loc );wcout<< zhuanhuan(L"100920020")<<endl;wcout<< zhuanhuan(L"100920020.123")<<endl;wcout<< zhuanhuan(L"100920020.12345")<<endl;return 0;}

代码输出为:

壹億零玖拾贰萬零贰拾圆整
壹億零玖拾贰萬零贰拾圆壹角贰分叁厘
壹億零玖拾贰萬零贰拾圆壹角贰分叁厘肆毫伍

本代码还发布在点击打开链接。代码不难,但也折腾了几个小时,与大家分享,欢迎指错!



热点排行