發(fā)布 | 漢字轉(zhuǎn)拼音工具

通過查找漢字拼音庫實現(xiàn)實時漢字轉(zhuǎn)拼音的功能。

demo.gif

實現(xiàn)

  • 加載漢字拼音對照文件pinyin.txt(4萬+漢字拼音對照)到QMap容器。
  • 遍歷QMap容器的漢字從而找到對應(yīng)的拼音,如找不到該漢字將原樣輸出。
  • 部分pinyin.txt內(nèi)容:(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("");

        /* 遍歷查找漢字-拼音對照表的內(nèi)容并將漢字替換為拼音 */
        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;
        }

        /* 讀取漢字對照表文件并轉(zhuǎn)換為QMap存儲 */
        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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容