阿拉伯数字转中文大写

代码如下:

#include<iostream>
#include<algorithm>
#include<vector>
#include<sstream>
#include<map>
#include<stack>
using namespace std;

string Converttochinese(string& a,vector<string>&p,vector<string>&q,map<char,string>&ma){
	string res_right="";
	stack<string>res_left;
	string res="";
	int pos=a.find('.');
	string left="";
	string right="";
	cout<<"pos:"<<pos<<endl;
	if(pos>=0){
	left = a.substr(0,pos-0);
	right=a.substr(pos+1,a.size()-pos-1);
	}
	else{
	    left=a;
	}

    res_left.push("元");
	for(int i=left.size()-1;i>=0;i--){
	if(i==int(left.size())-1){
		if(left[i]=='0'&&i<left.size()-1&&left[i+1]!='0')
		{	     
			res_left.push(ma[left[i]]);
		}
		else if(left[i]!='0'){
			res_left.push(ma[left[i]]);
		}   
	}//if
	else{
	if(left[i]=='0'&&i<left.size()-1&&left[i+1]!='0')
	{	     
		res_left.push(ma[left[i]]);
	}
	else if(left[i]!='0'){
		res_left.push(p[(left.size()-i-2)%8]);
		res_left.push(ma[left[i]]);
	}
    else if(p[(left.size()-i-2)%8]=="万"&&(i+4>=left.size()||left[i+4]=='0')){
		res_left.push("万");
	}
	}//else

	}//for
	
	
	
	while(!res_left.empty()){
		res +=res_left.top();
		res_left.pop();
	}
	cout<<"res:"<<res<<endl;
	for(int i=0;i<right.size();i++){
		if(i<=1){
		if(res.back()!='0')
		   res+=ma[right[i]];
      	if(right[i]!='0')
      	{
      	    res+=q[i];
		}
		}
	  }
		  
    if(right.size()==0){
		res = res+"整";
		return res; 
	}
	cout<<"res:"<<res<<endl;
	return res;
}
int main(){
	string tmp;
	vector<string>p{"拾","佰","仟","万","拾","佰","仟","亿"};
	vector<string>q{"角","分"};
	map<char,string>ma;
	ma['0']="零";
	ma['1']="壹";
	ma['2']="贰";
	ma['3']="叁";
	ma['4']="肆";
	ma['5']="伍";
	ma['6']="陆";
	ma['7']="柒";
	ma['8']="捌";
	ma['9']="玖";
	vector<string>arr;
	while(cin>>tmp){
		if(tmp=="]"){
			break;
		}
		if(tmp!="["){
			arr.push_back(tmp);
		}
	}
	cout<<"please wait:"<<endl;
	for(int i=0;i<arr.size();i++){
		arr[i]=Converttochinese(arr[i],p,q,ma);
	}
}
原文地址:https://www.cnblogs.com/qiuhaifeng/p/11508529.html