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

《C++》STL--string详解(上)

文章目录

  • 一、简介
  • 二、string类常用构造
    • 2.1.详解
    • 2.2示例
  • 三、string类对象的容量操作
    • 3.1详解
    • 3.2示例
  • 四、string类对象的访问及遍历操作
    • 4.1什么是迭代器
    • 4.2访问及遍历方法
    • 4.3示例
  • 五、string类对象的修改操作
    • 5.1详解
    • 5.2示例

一、简介

在C++中,string类提供了多种构造函数来创建字符串对象。了解这些构造函数的用法对于高效使用string类至关重要。本文将详细介绍string类的各种构造函数及其应用场景。

二、string类常用构造

2.1.详解

构造函数形式功能说明
string()构造空的string类对象(空字符串)
string(const char* s)用C风格字符串构造string对象
string(const string&s)拷贝构造函数,用另一个string对象构造新对象
string(size_t n, char c)构造包含n个字符c的string对象

2.2示例

#include <iostream>
#include <string>
using namespace std;int main() {// 多种初始化方式string s1;               // 空字符串string s2("Hello");      // 使用C风格字符串初始化string s3 = "World";     // 赋值初始化string s4(5, 'A');       // 5个'A'组成的字符串"AAAAA"string s5(s2);           // 拷贝构造cout << "s1: " << s1 << endl;cout << "s2: " << s2 << endl;cout << "s3: " << s3 << endl;cout << "s4: " << s4 << endl;cout << "s5: " << s5 << endl;return 0;
}

三、string类对象的容量操作

3.1详解

函数名称功能说明
size()返回字符串有效字符长度
length()与size()功能相同,返回字符串有效字符长度
capacity()返回当前为字符串分配的空间总大小
empty()检测字符串是否为空串,是返回true,否则返回false
clear()清空字符串中的所有有效字符
reserve(n)为字符串预留空间,但不改变字符串内容(不会缩小容量)
resize(n, c)将有效字符的个数改为n个,多出的空间用字符c填充(c可选,默认为空字符)

3.2示例

#include <iostream>
#include <string>
using namespace std;void capacityDemo() {string str = "Hello";cout << "初始状态:" << endl;cout << "内容: " << str << endl;cout << "size: " << str.size() << endl;cout << "length: " << str.length() << endl;cout << "capacity: " << str.capacity() << endl;cout << "empty: " << boolalpha << str.empty() << endl;// 使用reserve增加容量str.reserve(50);cout << "\nreserve(50)后:" << endl;cout << "size: " << str.size() << endl;cout << "capacity: " << str.capacity() << endl;// 使用resize改变大小str.resize(10, '!');cout << "\nresize(10, '!')后:" << endl;cout << "内容: " << str << endl;cout << "size: " << str.size() << endl;// 清空字符串str.clear();cout << "\nclear()后:" << endl;cout << "内容: " << str << endl;cout << "empty: " << str.empty() << endl;
}int main() {capacityDemo();return 0;
}

四、string类对象的访问及遍历操作

4.1什么是迭代器

  • 迭代器(Iterator)是C++中一种类似指针的对象,它提供了一种统一的方式来访问和遍历容器(如vector、list、map等)中的元素。迭代器是STL(标准模板库)的核心组件之一,它充当容器与算法之间的桥梁。

  • 可以把迭代器想象成书中的页码:

    • 书(容器)包含许多页(元素)

    • 页码(迭代器)帮助你定位特定页

    • 翻页操作(++/–)让你浏览全书

4.2访问及遍历方法

方法名称功能说明
operator[]返回pos位置的字符,const string类对象调用
at(pos)返回pos位置的字符,提供边界检查
begin() + end()begin获取第一个字符的迭代器,end获取最后一个字符下一个位置的迭代器
rbegin() + rend()rbegin获取最后一个字符的迭代器,rend获取第一个字符前一个位置的迭代器

4.3示例

#include <iostream>
#include <string>
using namespace std;void accessAndTraversalDemo() {string str = "Hello World";// 1. 使用operator[]访问cout << "使用operator[]访问:" << endl;for (size_t i = 0; i < str.size(); ++i) {cout << str[i] << " ";}cout << endl;// 2. 使用at()访问(带边界检查)cout << "\n使用at()访问:" << endl;try {for (size_t i = 0; i <= str.size(); ++i) {  // 故意越界cout << str.at(i) << " ";}} catch (const out_of_range& e) {cout << "\n捕获异常: " << e.what() << endl;}// 3. 使用迭代器遍历cout << "\n使用迭代器遍历:" << endl;for (auto it = str.begin(); it != str.end(); ++it) {cout << *it << " ";}cout << endl;// 4. 使用反向迭代器cout << "\n使用反向迭代器遍历:" << endl;for (auto rit = str.rbegin(); rit != str.rend(); ++rit) {cout << *rit << " ";}cout << endl;int main() {accessAndTraversalDemo();return 0;
}

五、string类对象的修改操作

5.1详解

函数名称功能说明
push_back(a)在字符串末尾插入字符a
append(str)在字符串后追加一个字符串
operator+=(str)在字符串后追加字符串str(最常用的追加方式)
c_str()返回C格式的字符串(const char*),用于与C函数交互
find(c, pos)从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
rfind(c, pos)从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
substr(pos, n)从pos位置开始,截取n个字符并返回
insert(pos, str)在pos位置插入字符串str
erase(pos, n)从pos位置开始删除n个字符
replace(pos, n, str)从pos位置开始替换n个字符为str

5.2示例

#include <iostream>
#include <string>
using namespace std;void modificationDemo() {string str = "C++ Programming";// 1. push_backstr.push_back('!');cout << "push_back后: " << str << endl;// 2. appendstr.append(" is fun");cout << "append后: " << str << endl;// 3. operator+=str += " and powerful";cout << "operator+=后: " << str << endl;// 4. c_str()演示cout << "\n使用c_str()输出: ";printf("%s\n", str.c_str());// 5. find和rfindsize_t pos = str.find("fun");cout << "\n'fun'首次出现在位置: " << pos << endl;pos = str.rfind('o');cout << "'o'最后一次出现在位置: " << pos << endl;// 6. substrstring sub = str.substr(4, 11);cout << "\n子串(4,11): " << sub << endl;// 7. insertstr.insert(0, "I think ");cout << "insert后: " << str << endl;// 8. erasestr.erase(0, 8);  // 删除"I think "cout << "erase后: " << str << endl;// 9. replacestr.replace(4, 11, "coding");cout << "replace后: " << str << endl;
}int main() {modificationDemo();return 0;
}
http://www.dtcms.com/a/300772.html

相关文章:

  • Linux文件理解,基础IO理解
  • 怎样让阿里云服务器(centos)有界面
  • 网络协议:计算机世界的“交通规则“与“社交礼仪“
  • i节点学习
  • Qt 分裂布局:QSplitter 使用指南
  • C语言——————学习笔记(自己看)
  • 基于多智能体的任务管理系统架构设计与实现
  • 北大区块链技术与应用 笔记
  • [STM32][HAL]stm32wbxx 超声波测距模块实现(HY-SRF05)
  • 【基础完全搜索】USACO Bronze 2022 Open - 谎言的人数Counting Liars
  • 元宇宙背景下治理模式:自治的乌托邦
  • JavaSE-String类
  • 【Ollama】大模型本地部署与 Java 项目调用指南
  • Wireshark TS | 发送数据超出接收窗口
  • C++核心编程学习-- 类和对象--继承
  • PROFINET转CAN通讯协议转换速通汽车制造
  • 简单题目之学校组织运动会
  • 【通识】线性代数(Linear Algebra)
  • 【C++】论如何封装红黑树模拟实现set和map
  • 【Java实例】服务器IP一站式管理
  • 新手向:IDM下载失败排查
  • 依赖倒置原则 Dependency Inversion Principle - DIP
  • MySQL 索引设计与查询性能优化实践指南
  • Chainlink Functions:为智能合约插上连接现实世界的翅膀
  • 【Redis】Redis 协议与连接
  • 使用低级上位画图法理解在对磁盘空间进行容量分配时【低级单位上位至高级单位的换算】
  • 系统集成项目管理工程师【第九章 项目管理概论】 - 项目管理过程组
  • Frontiers in Psychology投稿流程(一)
  • 【C语言网络编程】HTTP 客户端请求(基于 Socket 的完整实现)
  • k8s的csi对接GPFS