demo.gif通过查找汉字拼音库实现实时汉字转拼音的功能。
实现
- 加载汉字拼音对照文件
pinyin.txt
(4万+汉字拼音对照)到QMap容器。 - 遍历QMap容器的汉字从而找到对应的拼音,如找不到该汉字将原样输出。
- 部分
pinyin.txt
内容:(https://github.com/mozillazg/pinyin-data提供汉字拼音源强力支持)
líng,yuán,xīng 〇
qiū 㐀
tiàn 㐁
kuà 㐄
wǔ 㐅
yǐn 㐆
yí 㐌
xié 㐖
chóu 㐜
nuò 㐡
dān,qiú 㐤
xù 㐨
xíng 㐩
xiōng 㐫
liú 㐬
lǐn 㐭
核心代码
class Hanzi2Pinyin
{
public:
static QString find(const QString &hanzi)
{
static QMap<QString, QStringList> map = loadHanziTable(":/pinyin.txt");
QString output;
QStringList stringList = hanzi.split("");
/* 遍历查找汉字-拼音对照表的内容并将汉字替换为拼音 */
for (const QString &str : stringList) {
if (map.contains(str))
output += map[str].first();
else
output += str;
}
return output;
}
private:
/* 加载汉字对照表 */
static QMap<QString, QStringList> loadHanziTable(const QString &fileName)
{
QMap<QString, QStringList> map;
QFile file(fileName);
if (!file.open(QFile::ReadOnly | QFile::Text)) {
qDebug("File: '%s' open failed!", file.fileName().toStdString().c_str());
return map;
}
/* 读取汉字对照表文件并转换为QMap存储 */
while(!file.atEnd()) {
QString content = QString::fromUtf8(file.readLine());
map[content.split(" ").last().trimmed()] = content.split(" ").first().split(",");
}
file.close();
return map;
}
};
源码地址
欢迎大家一起协作完善。
https://github.com/aeagean/Hanzi2Pinyin
网友评论