通過查找漢字拼音庫實(shí)現(xiàn)實(shí)時(shí)漢字轉(zhuǎn)拼音的功能挽荡。
demo.gif
實(shí)現(xiàn)
- 加載漢字拼音對(duì)照文件
pinyin.txt
(4萬+漢字拼音對(duì)照)到QMap容器洽胶。 - 遍歷QMap容器的漢字從而找到對(duì)應(yīng)的拼音,如找不到該漢字將原樣輸出褐啡。
- 部分
pinyin.txt
內(nèi)容:(https://github.com/mozillazg/pinyin-data提供漢字拼音源強(qiáng)力支持)
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("");
/* 遍歷查找漢字-拼音對(duì)照表的內(nèi)容并將漢字替換為拼音 */
for (const QString &str : stringList) {
if (map.contains(str))
output += map[str].first();
else
output += str;
}
return output;
}
private:
/* 加載漢字對(duì)照表 */
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;
}
/* 讀取漢字對(duì)照表文件并轉(zhuǎn)換為QMap存儲(chǔ) */
while(!file.atEnd()) {
QString content = QString::fromUtf8(file.readLine());
map[content.split(" ").last().trimmed()] = content.split(" ").first().split(",");
}
file.close();
return map;
}
};
源碼地址
??歡迎大家一起協(xié)作完善绑警。
https://github.com/aeagean/Hanzi2Pinyin