当前位置:网站首页>QT 如何计算中英文字符串的长度
QT 如何计算中英文字符串的长度
2022-07-29 18:19:00 【hellokandy】
日常开发中,可能都会用到统计字符串长度,如果是英文和数字,一般情况计算出来的长度是正确的。但是,遇到中英文混合的情况,如果还是用之前的统计方式,得到的结果往往是不准确的!
在QT帮助文档中,我们可以找到关于QString用来计算字符个数的函数:length()
int QString::length() const
Returns the number of characters in this string. Equivalent to size().
如果直接使用 length() 来计算字符串长度,在遇到中英文混合的字符串时,就会抓瞎!那么准确计算中英文字符串长度的代码是什么样的呢?
正确计算中英文字符串长度的代码
#include <QtCore/QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int length = 0;
QString qstrEN = "hello,world!";
length = qstrEN.length();//12
qDebug() << "qstrEN.length()=" << length;
QString qstrZH = "好好学习,天天向上!";
length = qstrZH.length();//16?
qDebug() << "qstrZH.length()=" << length;
qstrZH = QString::fromLocal8Bit("好好学习,天天向上!");
length = qstrZH.toLocal8Bit().length();//20,OK!
qDebug() << "qstrZH.length()=" << length;
QString qstrMisc = QString::fromLocal8Bit("Good Good Study!天天向上!");
length = qstrMisc.length();//21
qDebug() << "qstrMisc.length()=" << length;
length = qstrMisc.toLocal8Bit().length();//26,OK!
qDebug() << "qstrMisc.length()=" << length;
//字符串截取
QByteArray bytestr = qstrMisc.toLocal8Bit().left(20);
qDebug() << "bytestr=" << bytestr;//"Good Good Study!\xCC\xEC\xCC\xEC"
QString localstr = QString::fromLocal8Bit(bytestr);
qDebug() << "localstr=" << localstr;//"Good Good Study!天天"
return 0;
}
输出结果:
qstrEN.length()= 12
qstrZH.length()= 16
qstrZH.length()= 20
qstrMisc.length()= 21
qstrMisc.length()= 26
bytestr= "Good Good Study!\xCC\xEC\xCC\xEC"
localstr= "Good Good Study!天天"
可以看到,在遇到中文或者中英文混合的字符串时,我们必须先通过 toLocal8Bit() 转为本地操作系统设置的字符集编码,然后再使用 length() 计算,才能得到正确的结果!
边栏推荐
- 牛客网刷题记录 || 指针
- MySQL 中的反斜杠 \\,真是太坑了
- swin-transformer初步理解
- 字节跳动 Flink 状态查询实践与优化
- R语言时间序列数据提取:使用xts包的last函数提取时间序列中最后面两周的数据(last 2 week)
- R语言使用treemap包中的treemap函数可视化treemap图:treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比
- 算力顶天地,存力纳乾坤:国家超级计算济南中心的一体两面
- [Code Hoof Set Novice Village 600 Questions] Find the square root of the given data
- R语言时间序列数据提取:使用xts包的first函数提取时间序列中最前面一个月的数据(first 1 month)
- 深投控收购意大利半导体设备商被叫停
猜你喜欢
随机推荐
《STL 源码剖析》学习笔记之容器(二)list
R语言使用treemap包中的treemap函数可视化treemap图:treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比
【学习笔记】NOIP模拟赛
Security whole configuration does not take effect after the Gateway?
redis学习三redis里的list、set、hash、sorted_set、skiplist
最近很郁闷
字节跳动 Flink 单点恢复功能及 Regional CheckPoint 优化实践
[转帖]为什么收入越来越少?
平行坐标图:高维数据可视化必备图形
【WSL】wsl pip NewConnectionError
不惧AMD及Arm挑战,英特尔称霸服务器市场的秘诀是什么?
Security整各Gateway后配置不生效?
7行代码让B站崩溃3小时,竟因“一个诡计多端的0”
维信诺与荣耀终端已签署8.91亿元订单
有效供应链管理的八大绩效分析指标(下)
从零在AutoDL调试一份目标检测代码
国产钡铼分布式IO模块如何与西门子PLC Profinet通讯
tar命令详解---归档及压缩
U盘拔出时总是提示有程序正在使用?
分批数据遍历的优化