代码如下:
#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);
}
}