温馨提示:答案为网友推荐,仅供参考
当前网址:https://verywind.cn/ee/effxe7yr3jfvf7v32y.html
第1个回答  2021-04-07
对于不清楚字符编码是个啥东西的小白,可以看这篇文章科普一下:“字符编码是个啥 - Qt必备技能”。

QString 类用于存储 Unicode 字符串。在 Qt 中存储一个 Unicode 字符是用 QChar 类,那么 QString 就是存储着一个个的 QChar。

QString 类采用了隐式共享方式来避免不必要的数据复制,减少了内存的使用。

几个需要注意的点
关于 QString 类有几个小点需要清楚:

QString 类存储的字符串默认是 Unicode
比如有如下代码,str 变量里面存储的数据是 Unicode 的编码格式,接收方如果解析成乱码,你就要想想两方的编码格式是不是都是 Unicode。如果不是的话,就需要用 QTextCodec 类来转码操作了。

QString str = "你好";
来自 char* 的数据 - 默认被当作 UTF-8 编码格式
最常用的就是传入一个 const char*,例如下列代码。根据“超越 C++ 的 Qt 翻译”中的“用 QString 包裹不需要翻译的文本”所述,Qt 默认将来自 char* 的字符串视为 UTF-8 编码格式,因此下列代码会在内部调用 fromUtf8() 函数来进行 char* -> QString 的转换。

QString str = "hello";
用 QChar 构建的 QString - 会进行深拷贝
因为 Unicode 编码格式是双字节存储一个字,所以 QString 类里面存储着一个个的 16-bit QChar 字符,每个 QChar 字符对应着一个 Unicode 4.0 字符。如果字符的编码大于65536时,用两个 QChar 存储这个字符。例如:

static const QChar data[4] = {0x0055, 0x006e, 0x10e3, 0x03a3};
QString str(data,4);
用 QChar 数组来构建 QString 是采用深拷贝的方式,意思就是说 QString 会完完全全复制一份 QChar 的数据。

提高性能的几个操作
(1)QString 复制 QChar 的数据时会进行深拷贝,意味着增加系统开销。如果不想这样,可以使用 fromRawData() 函数。

(2)可以使用 resize() 函数来设定好 QString 的容量并初始化每个值。因为 QString 类可以像 C++ 数组一样用 operator[]() 访问,所以对每个值初始化可以这样做:

QString str;
str.resize(4);
str[0] = QChar('U');
str[1] = QChar('n');
str[2] = QChar(0x10e3);
str[3] = QChar(0x03a3);
为什么要预分配内存?因为 str 变量运行时可能会在结尾插入一些字符串,这时候系统会调用内存分配器来进行重新规划,自然就增加了系统开销。类似的函数还有一个 reserve()。
第2个回答  2021-04-07
一个QString类型字符串,如何去掉其中的某一特定字符,比如“\n”?数字应该比较容易,中文的话也是有编码范围的,例如在Unicode编码中好像为4e00~9fa5(不确定)。所以我想你只需要扫描每个字符,判断其编码是否在对应区间就可以了。一个QString类型字符串,如何去掉其中的某一特定字符,比如“\n”
有奖励写回答共3个回答
tcl203
TA获得超过364个赞
聊聊
关注
成为第3位粉丝
QString的以下成员函数可以用于删除某一特定字符:
QString &QString::remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive)
例如:
QString t = "A\nB\nC";
t.remove(QChar('\n'), Qt::CaseInsensitive);
// 结果为:t == "ABC"
也可以使用QString的replace成员函数将某一特定字符替换为空字符来实现删除的效果。
关于QString的remove和replace成员函数都有多个重载,适用于不同的入参。
第3个回答  2016-12-04
数字应该比较容易,中文的话也是有编码范围的,例如在Unicode编码中好像为4e00~9fa5(不确定)。所以我想你只需要扫描每个字符,判断其编码是否在对应区间就可以了。本回答被网友采纳
第4个回答  2018-07-11
q_str.remove("\n");

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网