C++字符串(string)操作解析:从基础到进阶

1. 字符串基础:大小与容量

cpp

void test1() {string s1("Hello World");cout << "size : " << s1.size() << endl; // 输出字符串长度cout << "capacity = " << s1.capacity() << endl; // 输出字符串容量s1.reserve(100); // 预留空间cout << "reserve capacity = " << s1.capacity() << endl;s1.clear(); // 清除字符串内容cout << "clear size : " << s1.size() << endl;cout << "clear capacity = " << s1.capacity() << endl;cout << "clear s1 : " << s1 << endl;
}
  • size(): 返回字符串实际长度

  • capacity(): 返回字符串当前分配的存储空间大小

  • reserve(n): 预留空间,避免频繁重新分配内存

  • clear(): 清空字符串内容,但通常不会改变容量

2. 字符串遍历与访问

cpp

void test2() {string s1("Hello World");// 使用下标访问for (int i = 0; i < s1.size(); i++) {cout << s1[i] << " ";}// 使用迭代器string::iterator it = s1.begin();while (it != s1.end()) {cout << *(it++) << " ";}// 使用反向迭代器string::reverse_iterator rit = s1.rbegin();while (rit != s1.rend()) {cout << *(rit++) << " ";}// 使用范围for循环for (auto s : s1) {cout << s << " ";}
}

C++提供了多种遍历字符串的方式:

  1. 下标操作符[]

  2. 正向迭代器iterator

  3. 反向迭代器reverse_iterator

  4. 范围for循环(C++11引入)

3. 字符串修改操作

增加内容

cpp

// push_back: 尾部增加一个字符
s2.push_back('Y');// append: 在末尾添加字符串
s3.append("YM");
s3.append(5, 'y'); // 添加5个'y'// insert: 在指定位置插入
s4.insert(5, " YM");
s4.insert(5, 3, '*'); // 插入3个'*'// += 运算符
s5 += " YM";

删除内容

cpp

// pop_back(): 删除最后一个字符
s6.pop_back();// erase: 删除指定位置字符
s7.erase(8, 1); // 删除下标8开始的1个字符
s7.erase(s7.begin()); // 删除开头字符

修改内容

cpp

// replace: 替换内容
s8.replace(6, 2, "YM"); // 将下标6开始的2个字符替换为"YM"// swap: 交换内容
swap(s9, s10); // 算法库的swap
s9.swap(s10);  // 字符串类的swap,效率更高

4. 字符串查找与子串操作

cpp

void test4() {string s1("Hello World");// find: 正向查找size_t pos = s1.find('l');// rfind: 反向查找size_t rpos = s1.rfind('l');// 查找第一个出现在/不出现在给定集合中的字符size_t fpos = s1.find_first_of("ol");size_t nfpos = s1.find_first_not_of("ol");// substr: 获取子串string s = s1.substr(pos); // 从pos到结尾string s_part = s1.substr(pos, 3); // 从pos开始3个字符
}

查找函数返回string::npos(通常是size_t的最大值)表示未找到。

5. 字符串比较

字符串比较可以直接使用关系运算符:

cpp

string a = "apple";
string b = "banana";if (a < b) { // 字典序比较cout << "a comes before b";
}// 或者使用compare函数
int result = a.compare(b);
if (result < 0) {cout << "a is less than b";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93535.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蘑兔音乐:音乐创作的魔法棒

在这个充满创意与可能的时代&#xff0c;人人都有一颗渴望表达音乐之心。但传统音乐创作&#xff0c;复杂的乐理、昂贵的设备&#xff0c;总让人望而却步。别担心&#xff01;蘑兔 AI 音乐强势来袭&#xff0c;它就是那个能让音乐小白也能搞创作的神奇工具&#xff01;​灵感模…

从传统到智能:RFID 技术如何重构压缩机生产线

从传统到智能&#xff1a;RFID 技术如何重构压缩机生产线在工业 4.0 与中国制造 2025 战略的深入推进下&#xff0c;作为空调核心部件的压缩机制造业正加速从传统生产模式向智能化转型。压缩机生产以高精度、大批量为显著特点&#xff0c;长期面临生产数据断层、柔性化不足、质…

HTML5二十四节气网站源码

一. 二十四节气文化主题网站概述 本网站以中国传统文化瑰宝“二十四节气”为核心&#xff0c;通过现代Web技术打造沉浸式文化体验平台&#xff0c;融合视觉美学与交互创新&#xff0c;全方位展现节气的自然规律与人文内涵。网站采用响应式布局设计&#xff0c;适配多终端设备&…

微服务架构实战指南:从单体应用到云原生的蜕变之路

&#x1f31f; Hello&#xff0c;我是蒋星熠Jaxonic&#xff01; &#x1f308; 在浩瀚无垠的技术宇宙中&#xff0c;我是一名执着的星际旅人&#xff0c;用代码绘制探索的轨迹。 &#x1f680; 每一个算法都是我点燃的推进器&#xff0c;每一行代码都是我航行的星图。 &#x…

超越Transformer:大模型架构创新的深度探索

引言&#xff1a; 以GPT、Claude、Gemini等为代表的大语言模型&#xff08;LLMs&#xff09;已成为人工智能领域的核心驱动力。它们基于Transformer架构构建&#xff0c;在理解和生成人类语言方面展现出惊人的能力。然而&#xff0c;随着模型规模指数级增长和对更长上下文、更高…

完整设计 之 智能合约系统:主题约定、代理协议和智能合约 (临时命名)--腾讯元宝答问

本文要点和任务整体设计&#xff08;符号学 &#xff1a;为了诠释学实践运用 形。而上理论&#xff0c;将自己作为 两者结合的 条带 &#xff09;&#xff0c;包括三部分&#xff1a;内核&#xff08;设置-组态-主动把握的操作&#xff09;是认知学&#xff08;语义&#xff09…

同创物流学习记录2·电车光电

灯在闪烁&#xff0c;照到你前面的东西了&#xff0c;它可以照前面&#xff0c;可以照6米远。你那个电车前面五六米感应到东西了&#xff0c;它就会减速&#xff0c;然后到3米的样子&#xff0c;它会再减速。然后再到1米2的样子&#xff0c;它就会停下来。电车前侧光电这个区域…

linux I2C核心、总线与设备驱动

一、 linux I2C体系结构linux的I2C体系结构分为3个组成部分1&#xff09;I2C核心I2C核心提供了I2C总线驱动与设备驱动的注册、注销方法&#xff0c;I2C通信方法&#xff08;即Algorithm&#xff09;上层的与具体适配器无关的代码及其探测设备、检测设备地址的上层代码等…

跑实验记录

1.下载git&#xff08;base) mqmq-MS-7A59:~/桌面$ sudo apt update && sudo apt install git2.克隆项目&#xff08;base) mqmq-MS-7A59:~/桌面$ sudo apt update && sudo apt install git3.canda创建环境(base) mqmq-MS-7A59:~$ conda create -n HyTE python…

微软动手了,联合OpenAI + Azure 云争夺AI服务市场

❝开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;共3300人左右 …

Reading Coach-微软推出的免费AI阅读教练

本文转载自&#xff1a;Reading Coach-微软推出的免费AI阅读教练 - Hello123工具导航 ** 一、智能阅读辅助工具 Reading Coach 是微软推出的 AI 驱动阅读训练平台&#xff0c;通过个性化故事生成与实时发音反馈&#xff0c;帮助学生提升阅读流利度与词汇量。平台采用自适应学…

《软件工程导论》实验报告五 设计建模工具的使用(一)类图

目 录 一、实验目的 二、实验环境 三、学时分配 四、实验内容与步骤 1. 百度搜索1-2张类图&#xff0c;请重新绘制它们&#xff0c;并回答以下问题&#xff1a; 2. 根据以下描述&#xff0c;提取这个问题涉及的类&#xff0c;定义各个类之间的关系&#xff0c;并画出类图…

智慧景区导览系统:基于WebGL的手绘地图导览设计与应用,DeepSeek大模型赋能精准游客引导服务

本文面向 景区信息化负责人、后端开发者、全栈工程师&#xff0c;旨在解决传统景区导览系统静态地图信息有限、人工导游成本高、景区服务人员咨询压力大 的核心痛点&#xff0c;提供从技术选型到落地部署的全链路解决方案。如需获取智慧景区导览系统解决方案请前往文章最下方获…

使用uniapp自定义组件双重支付密码

自定义组件双重支付密码父组件<template><view class"container"><view class"top"></view><navbar navTitle"修改支付密码"></navbar><!-- 双重支付密码 --><view class"box">//核心…

C语言+安全函数+非安全函数

在C语言中&#xff0c;许多标准库函数&#xff08;如 strcpy、scanf、gets 等&#xff09;由于缺乏边界检查&#xff0c;容易导致 ​缓冲区溢出&#xff08;Buffer Overflow&#xff09;​、内存越界访问​ 等安全问题。为了解决这些问题&#xff0c;C11标准引入了 ​安全函数&…

android build.gradle中的namespace和applicationId的区别

namespace 和 applicationId 确实容作用&#xff1a;1. namespace引入版本&#xff1a;Android Gradle Plugin (AGP) 7.0 开始引入&#xff0c;替代 AndroidManifest.xml 里的 package 属性。作用&#xff1a; 用于 代码中的 R 文件、BuildConfig 生成的 Java/Kotlin 包名。决定…

数据结构初阶(15)排序算法—交换排序(快速排序)(动图演示)

2.3 交换排序 2.3.0 基本思想交换排序的基本思想&#xff1a;基本思想根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置。&#xff08;比较结果→交换位置&#xff09;特点将键值较大的记录向序列的尾部移动&#xff0c;键值较小的记录向序列的前部移动。比 换…

Apache Hudi:数据湖的实时革命

Apache Hudi是一个开源的数据湖存储格式和框架&#xff0c;它通过引入类似数据库的事务机制&#xff0c;解决了传统数据湖在实时更新、低延迟查询和增量消费方面的痛点。Hudi最初由Uber于2016年开发并应用于生产环境&#xff0c;2017年开源&#xff0c;2019年成为Apache孵化项目…

深度解析和鲸社区热门项目:电商双 11 美妆数据分析的细节与价值

在数据驱动决策的时代&#xff0c;电商大促期间的行业数据分析总能为从业者和学习者提供宝贵参考。今天&#xff0c;我们来详细拆解和鲸社区&#xff08;heywhale&#xff09;上一个备受关注的实战项目 ——《电商双 11 美妆数据分析》&#xff0c;看看它能给我们带来哪些启发。…

uniapp 开发微信小程序,获取经纬度并且转化详细地址(单独封装版本)

目录1、单独抽离封装2、使用示例3、前置条件和配置4、效果弹框1、单独抽离封装 // 腾讯地图SDK引入&#xff08;需提前下载qqmap-wx-jssdk.min.js文件&#xff09; // 注意&#xff1a;使用前需在微信公众平台配置request合法域名https://apis.map.qq.com var QQMapWX requir…