Qt知识点梳理 —— 实现汉字转拼音全拼简拼及首字母

该博客介绍了如何使用Qt实现将汉语转换为拼音全拼、简拼及首字母的功能。通过定义一个名为QStringCNLHelper的类,实现了汉语转拼音、转简拼和转第一个汉字首字母的方法。代码示例展示了从Unicode编码获取对应拼音的过程,并提到了资源文件`cnl.txt`的使用。开发环境为Qt Creator 4.11.1,采用Qt 5.14.2和MSVC2017编译器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求功能

输入一句汉语,转换成拼音全拼、简拼、每个字首字母及整句话首字母;

封装成单独的类,供后续使用方便;

运行效果

系统实现

汉语转拼音:

//汉语转拼音
QString CNLHelper::CNToPY(const QString &cnstr)
{
    QStringList list;
    for (int i = 0; i < cnstr.length(); ++i) {
        int unicode = QString::number(cnstr.at(i).unicode(), 10).toInt();
        if (unicode >= 0x4E00 && unicode <= 0x9FA5) {
            //这里的listPY就是按照UNICODE每个中文对应的拼音数组
            list.append(listPY.at(unicode - 0x4E00));
        } else {
            list.append(cnstr.at(i));
        }
    }

    return list.join(" ");
}

转简拼:

//汉语转所有字首字母
QString CNLHelper::CNToEL(const QString &cnstr)
{
    QString strChineseFirstPY = listJP.join("");
    if(cnstr.length() == 0) {
        return cnstr;
    }

    QString str;
    int index = 0;
    for(int i = 0; i < cnstr.length(); i++) {
        //若是字母或数字则直接输出
        ushort vChar = cnstr.at(i).unicode() ;
        if((vChar >= 'a' && vChar <= 'z' ) || (vChar >= 'A' && vChar <= 'Z')) {
            str.append(cnstr.at(i).toUpper());
        }

        if((vChar >= '0' && vChar <= '9')) {
            str.append(cnstr.at(i));
        } else {
            index = (int)vChar - 19968;
            if(index >= 0 && index < strChineseFirstPY.length()) {
                str.append(strChineseFirstPY.at(index));
            }
        }
    }

    return str;
}

汉语转第一个汉字首字母:

//汉语转第一个汉字首字母
QString CNLHelper::CNToFL(const QString &cnstr)
{
    return CNToEL(cnstr.mid(0,1));//取第一个汉字 并计算首字母
}

加入资源文件 “ cnl.txt ”:

项目源码

Github:lizhifun / QtCNLetter

Github 汉字拼音数据项目:mozillazg/pinyin-data 

开发环境

Author:Lizhifun

OS:Windows 10 家庭中文版

Compiler:Microsoft Visual C++ Compiler 15.9.28307.1259(amd64)

Kit:Desktop Qt 5.14.2 MSVC2017 64bit

Qt Creator:4.11.1

参考文章:http://www.qtcn.org/bbs/read-htm-tid-65502.html

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lizhifun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值