#include#include using namespace std; string zhCN[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; //正常记账范围内数值 string zhUNIT[] = { "拾","佰","仟","万","拾","佰","仟","亿" ,"拾","佰","仟","万", "拾","佰","仟"}; int main() { //12,345 ,678, 902 while (1) { char cc[32]; scanf("%s", cc); string str_value(cc); cout << "input value is " << str_value.c_str() << endl; stack nValue; for (int i = 0; i < str_value.length(); i++) { const char cc = str_value.at(i); nValue.push((cc - '0')); } stack cn; int ii = 0; int zcount = 0; while (!nValue.empty()) { int value = nValue.top(); cn.push(zhCN[value]); cn.push(zhUNIT[ii]); nValue.pop(); ii++; } if (!cn.empty()) { cn.pop(); } //删除零 stack cn2; while (!cn.empty()) { while (cn.top() != zhCN[0]) { cn2.push(cn.top()); cn.pop(); if (cn.empty()) { break; } } if (cn.empty()) { break; } //找到零结束 while (cn.top() == zhCN[0]) { cn.pop(); if (cn.empty()) { break; } if (cn.top() == zhUNIT[3])//保留万 { cn2.push(zhUNIT[3]); } if (cn.top() == zhUNIT[7])//保留亿 { cn2.push(zhUNIT[7]); } cn.pop(); }//找到零结束 if (!cn.empty()) { cn2.push(zhCN[0]); } } stack cn3; string newstr = ""; while (!cn2.empty()) { cn3.push(cn2.top()); cn2.pop(); } while (!cn3.empty()) { newstr += cn3.top(); cn3.pop(); } cout << "newstr is " << newstr.c_str() << endl; } return 0; }