前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >发布 | 汉字转拼音工具

发布 | 汉字转拼音工具

作者头像
Qt君
发布2020-02-13 16:43:36
1.8K0
发布2020-02-13 16:43:36
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

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

实现

  • 加载汉字拼音对照文件pinyin.txt(4万+汉字拼音对照)到QMap容器。
  • 遍历QMap容器的汉字从而找到对应的拼音,如找不到该汉字将原样输出。
  • 部分pinyin.txt内容:(https://github.com/mozillazg/pinyin-data提供汉字拼音源强力支持)
代码语言:javascript
复制
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 㐭

核心代码

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现
  • 核心代码
  • 源码地址
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档