美文网首页
发布 | 汉字转拼音工具

发布 | 汉字转拼音工具

作者: Qt君 | 来源:发表于2020-01-12 13:30 被阅读0次

    通过查找汉字拼音库实现实时汉字转拼音的功能。

    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

    相关文章

      网友评论

          本文标题:发布 | 汉字转拼音工具

          本文链接:https://www.haomeiwen.com/subject/udwiactx.html