只能转一部分。。。待完善
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
// 定义中文字符与阿拉伯数字之间的映射关系
unordered_map<wchar_t, int> common_used_numerals = {
{L'零', 0}, {L'一', 1}, {L'二', 2}, {L'两', 2}, {L'三', 3},
{L'四', 4}, {L'五', 5}, {L'六', 6}, {L'七', 7}, {L'八', 8},
{L'九', 9}, {L'十', 10}, {L'百', 100}, {L'千', 1000},
{L'万', 10000}, {L'亿', 100000000}
};
int convert(const wstring& s) {
int cur_total = 0; // 最终结果
int unit = 1; // 单位(个、十、百、千、万)
// 从右到左遍历字符串
for (int i = s.size() - 1; i >= 0; --i) {
int num = common_used_numerals[s[i]];
// 处理 0-9 的数字
if (num < 10) {
cur_total += unit * num;
}
// 特殊情况: 处理 10-19,如 "十九"
if (num >= 10 && i == 0) {
cur_total += num * unit;
}
// 处理 20 及以上的情况
else if (num >= 10) {
if (num > unit) { // 进位,如 "百" > "十"
unit = num;
} else { // 不进位,如 "三百"
cur_total += num * unit;
}
}
}
return cur_total;
}
int main() {
cout << convert(L"十九") << endl;
cout << convert(L"一千三百二十七") << endl;
return 0;
}