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

通过用例演示如何反向截取QString对象的子串

在Qt中,QString类本身并没有直接提供一个名为“反向截取”的方法,因为通常截取操作是基于起始位置和长度的。但是,我们可以通过组合使用QString的其他方法来模拟反向截取的效果,即从一个字符串的末尾开始截取指定长度的子串。

这里,我们可以使用length()方法来获取字符串的总长度,然后结合mid()方法来实现反向截取。以下是一个用例,演示了如何反向截取QString对象的子串。

用例:反向截取指定长度的子串

#include <QString>
#include <QDebug>int main() {QString str = "Hello, Qt World!";// 假设我们想从字符串末尾开始截取6个字符int lengthToExtract = 6;// 首先,计算截取子串的起始索引// 由于mid()的索引是从0开始的,而我们需要从末尾开始截取,所以起始索引是 length() - lengthToExtractint startIndex = str.length() - lengthToExtract;// 如果startIndex小于0,则整个字符串的长度都小于要截取的长度,直接截取整个字符串if (startIndex < 0) {startIndex = 0;}// 使用mid()方法截取子串QString subStr = str.mid(startIndex);// 注意:这里我们没有指定mid()的第二个参数(长度),因此它会截取从startIndex到字符串末尾的所有字符// 如果我们确实需要截取固定长度的子串,并且不希望startIndex小于0,可以添加一个判断// 例如,如果startIndex小于0,则截取整个字符串(虽然在这个用例中我们已经处理了这种情况)qDebug() << "Substring from the end with length" << lengthToExtract << ":" << subStr; // 输出:World!return 0;
}

然而,上面的代码在startIndex小于0时实际上已经处理了整个字符串长度小于要截取长度的情况,并且简单地让startIndex为0,从而截取整个字符串。但在大多数情况下,我们可能想要确保只截取指定的长度(如果可能的话),并且在字符串长度不足以支持整个截取时得到尽可能长的子串。

如果我们确实想要确保子串的长度正好是lengthToExtract(如果可能的话),并且当字符串不够长时返回一个较短的子串,我们可以这样做:

#include <QString>
#include <QDebug>int main() {QString str = "Hello";int lengthToExtract = 6;// 计算实际可以截取的子串长度int actualLength = qMin(lengthToExtract, str.length());// 计算起始索引(总是非负的)int startIndex = str.length() - actualLength;// 截取子串QString subStr = str.mid(startIndex, actualLength);qDebug() << "Substring from the end with maximum length" << lengthToExtract << ":" << subStr; // 输出:Hello(因为整个字符串长度小于要截取的长度)// 如果想要处理字符串长度小于要截取长度时返回空字符串的情况,可以添加如下判断:if (actualLength < lengthToExtract) {subStr.clear(); // 或者直接不赋值给subStr,让它保持默认构造后的空状态}// 但在这个例子中,我们直接输出了实际截取到的子串return 0;
}

然而,请注意,在上面的修改后的例子中,如果字符串长度小于lengthToExtract,我们实际上还是返回了字符串的剩余部分,而不是空字符串。如果你想要在这种情况下返回空字符串,可以在计算actualLength后添加一个条件判断来清空subStr(如注释所示)。但在很多情况下,返回字符串的剩余部分也是有意义的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python 算法交易实验88 QTV200日常推进-关于继续前进的思考
  • 打破AI壁垒-降低AI入门门槛
  • 【扇贝编程】使用Selenium模拟浏览器获取动态内容笔记
  • 【苍穹外卖】Day 6 HttpClient、wx小程序
  • 用Boot写mybatis的增删改查
  • AI prompt(提示词)
  • 【Python报错已解决】 AttributeError: ‘move_to‘ requires a WebElement
  • 【论文阅读】DETRs Beat YOLOs on Real-time Object Detection
  • [项目][CMP][直接向堆申请页为单位的大块内存]详细讲解
  • Spring 中使用的设计模式全面解析
  • 自动化表格处理的革命:智能文档系统技术解析
  • 目标检测-YOLOv6
  • 四个pdf软件分享,你更爱哪一款?
  • 数学基础 -- 线性代数之格拉姆-施密特正交化
  • 【AcWing】852. spfa判断负环
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 07.Android之多媒体问题
  • 230. Kth Smallest Element in a BST
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • docker-consul
  • JavaScript服务器推送技术之 WebSocket
  • Linux快速复制或删除大量小文件
  • Linux中的硬链接与软链接
  • mysql常用命令汇总
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Vue 2.3、2.4 知识点小结
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 对超线程几个不同角度的解释
  • 分类模型——Logistics Regression
  • 离散点最小(凸)包围边界查找
  • 前嗅ForeSpider教程:创建模板
  • 以太坊客户端Geth命令参数详解
  • 自制字幕遮挡器
  • 回归生活:清理微信公众号
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #APPINVENTOR学习记录
  • #php的pecl工具#
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (三十五)大数据实战——Superset可视化平台搭建
  • (四)库存超卖案例实战——优化redis分布式锁
  • (五)关系数据库标准语言SQL
  • (学习日记)2024.01.19
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)jQuery 基础
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.
  • .sys文件乱码_python vscode输出乱码