当前位置: 首页 > news >正文

Qt 字符串类应用

  • Qt 字符串类应用
  • 1. 创建和初始化 QString
  • 2. 字符串连接
  • 3. 字符串格式化
  • 4. 字符串长度和访问字符
  • 5. 字符串查找和替换
  • 6. 字符串分割和连接
  • 7. 字符串转换
  • 8.判断子字符串是否存在
  • 9. 使用正则表达式查询
  • 10 检查字符串是否以特定子字符串开头
  • 11.比较字符串
    • 使用 operator== 和 operator!=
    • 使用 compare 方法
    • 使用 localeAwareCompare 方法
    • 使用 operator<, operator<=, operator>, operator>=
    • 字符串排序
  • 12 使用 left, right, mid 方法提取子字符串
  • 13 使用 trimmed, simplified 方法清理字符串
  • 14.使用 toUpper, toLower 方法转换大小写
  • 15.使用 isNull 和 isEmpty 方法检查字符串状态
  • 16 将字符转换为 ASCII 码
  • 17 将字符串转换为 UTF-8 编码
  • 18.将 UTF-8 编码的字节数组转换为字符串
  • 19 使用 QTextCodec 进行编码转换
  • 20 使用 QTextStream 进行文件读写

Qt 字符串类应用

在 Qt 中,字符串类 QString 是一个非常强大且常用的类,用于处理 Unicode 字符串。QString 提供了丰富的功能,包括字符串操作、格式化、转换等。
以下是一些常见的 QString 应用示例:

1. 创建和初始化 QString

#include <QString>int main() {// 创建一个空的 QStringQString emptyString;// 使用字符串字面量初始化 QStringQString str = "Hello, World!";// 使用 fromUtf8 方法初始化 QStringQString utf8String = QString::fromUtf8("你好,世界!");return 0;
}

2. 字符串连接

#include <QString>
#include <QDebug>int main() {QString str1 = "Hello";QString str2 = "World";// 使用 + 运算符连接字符串QString result = str1 + " " + str2;qDebug() << result;  // 输出: "Hello World"// 使用 append 方法连接字符串str1.append(" ").append(str2);qDebug() << str1;  // 输出: "Hello World"return 0;
}

3. 字符串格式化

#include <QString>
#include <QDebug>int main() {int number = 42;QString str = QString("The answer is %1").arg(number);qDebug() << str;  // 输出: "The answer is 42"// 格式化多个参数QString name = "Alice";int age = 30;QString formattedStr = QString("Name: %1, Age: %2").arg(name).arg(age);qDebug() << formattedStr;  // 输出: "Name: Alice, Age: 30"return 0;
}

4. 字符串长度和访问字符

#include <QString>
#include <QDebug>int main() {QString str = "Hello";// 获取字符串长度int length = str.length();qDebug() << "Length:" << length;  // 输出: "Length: 5"// 访问字符QChar ch = str.at(1);qDebug() << "Second character:" << ch;  // 输出: "Second character: e"// 修改字符str[0] = 'h';qDebug() << str;  // 输出: "hello"return 0;
}

5. 字符串查找和替换

#include <QString>
#include <QDebug>int main() {QString str = "Hello, World!";// 查找子字符串int index = str.indexOf("World");qDebug() << "Index of 'World':" << index;  // 输出: "Index of 'World': 7"// 替换子字符串QString replacedStr = str.replace("World", "Qt");qDebug() << replacedStr;  // 输出: "Hello, Qt!"return 0;
}

6. 字符串分割和连接

#include <QString>
#include <QStringList>
#include <QDebug>int main() {QString str = "apple,banana,cherry";// 分割字符串QStringList list = str.split(",");qDebug() << list;  // 输出: ("apple", "banana", "cherry")//牛逼// 连接字符串QString joinedStr = list.join("; ");qDebug() << joinedStr;  // 输出: "apple; banana; cherry"return 0;
}

7. 字符串转换

#include <QString>
#include <QDebug>int main() {QString str = "42";// 转换为整数int number = str.toInt();qDebug() << "Number:" << number;  // 输出: "Number: 42"// 整数转换为字符串QString newStr = QString::number(number);qDebug() << newStr;  // 输出: "42"return 0;
}

8.判断子字符串是否存在

#include <QString>
#include <QDebug>int main() {QString str = "Hello, World!";// 判断是否包含子字符串 "World"bool containsWorld = str.contains("World");qDebug() << "Contains 'World':" << containsWorld;  // 输出: "Contains 'World': true"// 判断是否包含不存在的子字符串 "Qt"bool containsQt = str.contains("Qt");qDebug() << "Contains 'Qt':" << containsQt;  // 输出: "Contains 'Qt': false"return 0;
}

9. 使用正则表达式查询

#include <QString>
#include <QRegExp>
#include <QDebug>int main() {QString str = "Hello, World! Hello, Qt!";// 使用 QRegExp 查找所有匹配的子字符串QRegExp rx("Hello");int pos = 0;while ((pos = rx.indexIn(str, pos)) != -1) {qDebug() << "Found 'Hello' at index:" << pos;pos += rx.matchedLength();}return 0;
}#include <QString>
#include <QRegularExpression>
#include <QDebug>int main() {QString str = "Hello, World! Hello, Qt!";// 使用 QRegularExpression 查找所有匹配的子字符串QRegularExpression re("Hello");QRegularExpressionMatchIterator it = re.globalMatch(str);while (it.hasNext()) {QRegularExpressionMatch match = it.next();qDebug() << "Found 'Hello' at index:" << match.capturedStart();}return 0;
}

10 检查字符串是否以特定子字符串开头

#include <QString>
#include <QDebug>int main() {QString str = "Hello, World!";// 检查字符串是否以 "Hello" 开头bool startsWithHello = str.startsWith("Hello");qDebug() << "Starts with 'Hello':" << startsWithHello;  // 输出: "Starts with 'Hello': true"// 检查字符串是否以 "hello" 开头(大小写敏感)bool startsWithHelloInsensitive = str.startsWith("hello", Qt::CaseInsensitive);qDebug() << "Starts with 'hello' (case insensitive):" << startsWithHelloInsensitive;  // 输出: "Starts with 'hello' (case insensitive): true"return 0;
}

11.比较字符串

使用 operator== 和 operator!=

#include <QString>
#include <QDebug>int main() {QString str1 = "Hello";QString str2 = "Hello";QString str3 = "World";// 比较字符串是否相等bool isEqual = (str1 == str2);qDebug() << "str1 == str2:" << isEqual;  // 输出: "str1 == str2: true"// 比较字符串是否不相等bool isNotEqual = (str1 != str3);qDebug() << "str1 != str3:" << isNotEqual;  // 输出: "str1 != str3: true"return 0;
}

使用 compare 方法

#include <QString>
#include <QDebug>int main() {QString str1 = "Hello";QString str2 = "hello";// 比较字符串(大小写敏感)int result = str1.compare(str2);qDebug() << "str1.compare(str2):" << result;  // 输出: "str1.compare(str2): -32"// 比较字符串(大小写不敏感)int resultInsensitive = str1.compare(str2, Qt::CaseInsensitive);qDebug() << "str1.compare(str2, Qt::CaseInsensitive):" << resultInsensitive;  // 输出: "str1.compare(str2, Qt::CaseInsensitive): 0"return 0;
}

使用 localeAwareCompare 方法

localeAwareCompare 方法用于根据当前区域设置进行字符串比较。这对于需要考虑语言和文化差异的比较非常有用。

#include <QString>
#include <QDebug>int main() {QString str1 = "Ångström";QString str2 = "Angstrom";// 使用区域设置进行比较int result = str1.localeAwareCompare(str2);qDebug() << "str1.localeAwareCompare(str2):" << result;  // 输出: "str1.localeAwareCompare(str2): -1"return 0;
}

使用 operator<, operator<=, operator>, operator>=

QString 还重载了 <, <=, >, >= 运算符,用于比较字符串的大小。

#include <QString>
#include <QDebug>int main() {QString str1 = "apple";QString str2 = "banana";// 比较字符串大小bool isLess = (str1 < str2);qDebug() << "str1 < str2:" << isLess;  // 输出: "str1 < str2: true"bool isGreaterEqual = (str2 >= str1);qDebug() << "str2 >= str1:" << isGreaterEqual;  // 输出: "str2 >= str1: true"return 0;
}

字符串排序

#include <QStringList>
#include <QDebug>int main() {QStringList list = {"banana", "apple", "cherry"};// 对字符串列表进行排序list.sort();qDebug() << "Sorted list:" << list;  // 输出: "Sorted list: ("apple", "banana", "cherry")"return 0;
}

12 使用 left, right, mid 方法提取子字符串

#include <QString>
#include <QDebug>int main() {QString str = "Hello, World!";// 提取前5个字符QString leftStr = str.left(5);qDebug() << "Left 5 characters:" << leftStr;  // 输出: "Left 5 characters: Hello"// 提取后6个字符QString rightStr = str.right(6);qDebug() << "Right 6 characters:" << rightStr;  // 输出: "Right 6 characters: World!"// 提取从位置7开始的5个字符QString midStr = str.mid(7, 5);qDebug() << "Mid 5 characters from index 7:" << midStr;  // 输出: "Mid 5 characters from index 7: World"return 0;
}

13 使用 trimmed, simplified 方法清理字符串

trimmed 方法用于去除字符串两端的空白字符,而 simplified 方法不仅去除两端的空白字符,还用单个空格替换连续的空白字符。

#include <QString>
#include <QDebug>int main() {QString str = "   Hello,   World!   ";// 去除两端的空白字符QString trimmedStr = str.trimmed();qDebug() << "Trimmed string:" << trimmedStr;  // 输出: "Trimmed string: Hello,   World!"// 去除两端的空白字符,并用单个空格替换连续的空白字符QString simplifiedStr = str.simplified();qDebug() << "Simplified string:" << simplifiedStr;  // 输出: "Simplified string: Hello, World!"return 0;
}

14.使用 toUpper, toLower 方法转换大小写

#include <QString>
#include <QDebug>int main() {QString str = "Hello, World!";// 转换为大写QString upperStr = str.toUpper();qDebug() << "Uppercase string:" << upperStr;  // 输出: "Uppercase string: HELLO, WORLD!"// 转换为小写QString lowerStr = str.toLower();qDebug() << "Lowercase string:" << lowerStr;  // 输出: "Lowercase string: hello, world!"return 0;
}

15.使用 isNull 和 isEmpty 方法检查字符串状态

#include <QString>
#include <QDebug>int main() {QString nullStr;QString emptyStr = "";QString nonEmptyStr = "Hello";// 检查字符串是否为空(未初始化)qDebug() << "Null string:" << nullStr.isNull();  // 输出: "Null string: true"qDebug() << "Empty string:" << emptyStr.isNull();  // 输出: "Empty string: false"// 检查字符串是否为空字符串(长度为0)qDebug() << "Empty string:" << emptyStr.isEmpty();  // 输出: "Empty string: true"qDebug() << "Non-empty string:" << nonEmptyStr.isEmpty();  // 输出: "Non-empty string: false"return 0;
}

16 将字符转换为 ASCII 码

#include <QString>
#include <QDebug>int main() {QChar ch = 'A';// 获取字符的 ASCII 码ushort asciiCode = ch.unicode();qDebug() << "ASCII code of 'A':" << asciiCode;  // 输出: "ASCII code of 'A': 65"return 0;
}

17 将字符串转换为 UTF-8 编码

#include <QString>
#include <QDebug>
#include <QByteArray>int main() {QString str = "你好,世界!";// 将字符串转换为 UTF-8 编码的字节数组QByteArray utf8Bytes = str.toUtf8();qDebug() << "UTF-8 bytes of '你好,世界!':" << utf8Bytes;  // 输出: "UTF-8 bytes of '你好,世界!': "\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81""return 0;
}

18.将 UTF-8 编码的字节数组转换为字符串

#include <QString>
#include <QDebug>
#include <QByteArray>int main() {QByteArray utf8Bytes = QByteArray("\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81");// 将 UTF-8 编码的字节数组转换为字符串QString str = QString::fromUtf8(utf8Bytes);qDebug() << "String from UTF-8 bytes:" << str;  // 输出: "String from UTF-8 bytes: 你好,世界!"return 0;
}

19 使用 QTextCodec 进行编码转换

QTextCodec 类提供了更通用的方法来进行字符编码转换。以下是一个示例,展示如何使用 QTextCodec 将字符串转换为 UTF-8 编码并转换回字符串。

#include <QString>
#include <QDebug>
#include <QByteArray>
#include <QTextCodec>int main() {QString str = "你好,世界!";// 获取 UTF-8 编码器QTextCodec *utf8Codec = QTextCodec::codecForName("UTF-8");// 将字符串转换为 UTF-8 编码的字节数组QByteArray utf8Bytes = utf8Codec->fromUnicode(str);qDebug() << "UTF-8 bytes of '你好,世界!':" << utf8Bytes;  // 输出: "UTF-8 bytes of '你好,世界!': "\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81""// 将 UTF-8 编码的字节数组转换为字符串QString restoredStr = utf8Codec->toUnicode(utf8Bytes);qDebug() << "String from UTF-8 bytes:" << restoredStr;  // 输出: "String from UTF-8 bytes: 你好,世界!"return 0;
}

20 使用 QTextStream 进行文件读写

在处理文件时,可以使用 QTextStream 并指定编码为 UTF-8,以便正确读写 UTF-8 编码的文本文件。

#include <QString>
#include <QDebug>
#include <QFile>
#include <QTextStream>int main() {QString str = "你好,世界!";// 写入文件QFile file("output.txt");if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {QTextStream out(&file);out.setCodec("UTF-8");out << str;file.close();}// 读取文件QString fileContent;if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QTextStream in(&file);in.setCodec("UTF-8");fileContent = in.readAll();file.close();}qDebug() << "File content:" << fileContent;  // 输出: "File content: 你好,世界!"return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 代码随想录算法训练营第二天 | 滑动窗口 + 螺旋矩阵
  • React概念理解
  • 使用yolov5实现目标检测简单案例(测试图片)
  • MySQL- 覆盖索引
  • STM32初识
  • 3.类和对象(中)
  • 《Techporters架构搭建》-Day06 国际化
  • 怎样在 SQL 中对一个包含销售数据的表按照销售额进行降序排序?
  • Ubuntu安装Anaconda3
  • Bug定义及生命周期(七)
  • Java中Maven打包方式pom、jar、war的区别
  • 对象切片(Object Slicing)
  • Data Harmonizer(数据协调器)------线程
  • 拥有一个公网固定IP,既然如此简单、HTTP 虚拟专线:为您开启专属网络访问新时代
  • 【STM32 FreeRTOS】事件标志组
  • 自己简单写的 事件订阅机制
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • bearychat的java client
  • Brief introduction of how to 'Call, Apply and Bind'
  • canvas绘制圆角头像
  • Java教程_软件开发基础
  • log4j2输出到kafka
  • MQ框架的比较
  • Theano - 导数
  • Vue UI框架库开发介绍
  • XML已死 ?
  • 从零开始的无人驾驶 1
  • 记一次和乔布斯合作最难忘的经历
  • 简单数学运算程序(不定期更新)
  • 简析gRPC client 连接管理
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 我的面试准备过程--容器(更新中)
  • 详解NodeJs流之一
  • 一个SAP顾问在美国的这些年
  • 正则表达式
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #QT 笔记一
  • #单片机(TB6600驱动42步进电机)
  • #数据结构 笔记一
  • (4)logging(日志模块)
  • (day6) 319. 灯泡开关
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二)springcloud实战之config配置中心
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (回溯) LeetCode 46. 全排列
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (九)c52学习之旅-定时器
  • (十)T检验-第一部分