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

「C/C++」C++ STL容器库 之 std::string 字符串类

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明

目录

      • 引言
      • 支持的C++版本
      • std::string的基本用法
        • 1. 包含头文件
        • 2. 构造和初始化
        • 3. 访问和修改字符串
        • 4. 字符串比较
        • 5. 字符串查找和替换
        • 6. 字符串迭代
      • 总结

引言

std::string是C++标准库中的一个核心类,用于表示和操作字符串。这个类在C++98标准中首次引入,并在后续的C++03、C++11、C++14、C++17和C++20等标准中得到了持续的改进和增强。std::string提供了丰富的成员函数和操作符,使得字符串的创建、修改、访问和比较等操作变得既简单又高效。本文将详细介绍std::string的用法,并通过代码示例展示其在实际编程中的应用。

在这里插入图片描述

支持的C++版本

std::string自C++98标准以来就一直是C++标准库的一部分,并在后续的C++标准中得到了持续的支持和改进。因此,你可以在任何支持这些标准的C++编译器中使用std::string

std::string的基本用法

1. 包含头文件

要使用std::string,你需要包含<string>头文件。

#include <string>
2. 构造和初始化

std::string的构造函数允许你通过多种方式初始化字符串,包括无参构造(空字符串)、使用C风格字符串初始化、使用另一个std::string对象初始化、使用字符数组或字符指针的指定长度部分初始化等。

#include <iostream>
#include <string>int main() {// 无参构造,空字符串std::string s1;std::cout << "s1: \"" << s1 << "\"" << std::endl; // 输出:s1: ""// 使用C风格字符串初始化std::string s2("Hello, World!");std::cout << "s2: \"" << s2 << "\"" << std::endl; // 输出:s2: "Hello, World!"// 使用另一个std::string对象初始化std::string s3(s2);std::cout << "s3: \"" << s3 << "\"" << std::endl; // 输出:s3: "Hello, World!"// 使用字符数组或字符指针的指定长度部分初始化const char* cstr = "Hello, C++!";std::string s4(cstr, 5); // 只取前5个字符std::cout << "s4: \"" << s4 << "\"" << std::endl; // 输出:s4: "Hello"return 0;
}
3. 访问和修改字符串

std::string提供了成员函数来访问和修改字符串的内容,包括at()operator[]front()back()append()assign()等。

#include <iostream>
#include <string>int main() {std::string s = "Hello, World!";// 访问字符串中的字符char ch = s[7]; // 访问第8个字符(索引从0开始)std::cout << "Character at index 7: " << ch << std::endl; // 输出:Character at index 7: W// 修改字符串中的字符s[7] = 'C';std::cout << "Modified string: " << s << std::endl; // 输出:Modified string: Hello, C++!// 添加字符到字符串末尾s.append("!!!");std::cout << "Appended string: " << s << std::endl; // 输出:Appended string: Hello, C++!!!// 分配新的字符串内容s.assign("New String");std::cout << "Assigned string: " << s << std::endl; // 输出:Assigned string: New Stringreturn 0;
}
4. 字符串比较

std::string重载了比较操作符(如==!=<<=>>=)来比较两个字符串的内容。

#include <iostream>
#include <string>int main() {std::string s1 = "Hello";std::string s2 = "World";std::string s3 = "Hello";// 比较字符串if (s1 == s3) {std::cout << "s1 is equal to s3" << std::endl; // 输出:s1 is equal to s3} else {std::cout << "s1 is not equal to s3" << std::endl;}if (s1 < s2) {std::cout << "s1 is less than s2" << std::endl; // 输出:s1 is less than s2} else {std::cout << "s1 is not less than s2" << std::endl;}return 0;
}
5. 字符串查找和替换

std::string提供了成员函数来查找子字符串的位置和替换子字符串,包括find()rfind()replace()等。

#include <iostream>
#include <string>int main() {std::string s = "Hello, World! Hello, C++!";// 查找子字符串size_t pos = s.find("Hello");if (pos != std::string::npos) {std::cout << "Found 'Hello' at position: " << pos << std::endl; // 输出:Found 'Hello' at position: 0} else {std::cout << "'Hello' not found" << std::endl;}// 替换子字符串std::string replaced = s.replace(s.find("C++"), 3, "STL");std::cout << "Replaced string: " << replaced << std::endl; // 输出:Replaced string: Hello, World! Hello, STL!return 0;
}
6. 字符串迭代

你可以使用迭代器来遍历std::string中的字符。

#include <iostream>
#include <string>int main() {std::string s = "Hello, World!";// 使用迭代器遍历字符串for (std::string::iterator it = s.begin(); it != s.end(); ++it) {std::cout << *it;}std::cout << std::endl; // 输出:Hello, World!return 0;
}

在C++11及更高版本中,你还可以使用范围for循环来简化迭代过程。

#include <iostream>
#include <string>int main() {std::string s = "Hello, World!";// 使用范围for循环遍历字符串for (char ch : s) {std::cout << ch;}std::cout << std::endl; // 输出:Hello, World!return 0;
}

总结

std::string是C++标准库中的一个功能强大的字符串处理类,它提供了丰富的成员函数和操作符来创建、修改、访问和比较字符串。通过使用std::string,程序员可以更加高效和安全地处理字符串数据。无论是在文本处理、文件I/O还是网络通信等场景中,std::string都是一个不可或缺的工具。希望本文能够帮助读者更好地理解和使用std::string


http://www.mrgr.cn/news/56034.html

相关文章:

  • 【Vue3】将 Element Plus 引入 Vue3 项目
  • 如何将 Docker 镜像的 tar 文件迁移到另一台服务器并运行容器
  • ChatTTS在Windows电脑的本地部署与远程生成音频详细实战指南
  • 第二百九十二节 JPA教程 - JPA查询成员示例
  • 学习eNSP对提升就业竞争力有多大帮助?
  • 曲线与平面曲线 | 正则曲线、弧长参数、切线方程曲率
  • 银行软件测试有哪些测试点?一般银行的软件测试工作流程有哪些?
  • 2226733-37-3,Mal-amido-PEG24-NHS是一种结合了马来酰亚胺和聚乙二醇的活性酯化合物
  • 医疗健康行业获客难?来看这位区域总经理的业绩增长破局之道
  • sql获取时间差
  • WebGl 使用平行矩阵实现图像平移
  • 浪潮云启操作系统(InLinux)bcache缓存实践:理解OpenStack环境下虚拟机卷、Ceph OSD、bcache设备之间的映射关系
  • 太极0.5
  • 如何开发电商平台?直播带货系统源码的核心技术解析
  • 基于SSM网络在线考试系统的设计
  • CentOS7上下载安装 Docker Compose
  • R语言机器学习算法实战系列(六)K-邻近算法 (K-Nearest Neighbors)
  • 解决:Cannot find bean with qualifier ‘xxx‘
  • GSM850分几个Channel,为什么这样分?
  • 多品牌NVR管理工具/设备EasyNVR多个NVR同时管理实现技术赋能车载监控行业
  • 大范围实景三维智能调色 | 模方自动化匀色解决方案
  • 【Linux】文件IO深度解析:文件描述符与重定向的奥秘
  • 人工智能的时代,用好这些AI工具,闲暇时间月入过万不是梦!
  • 【AIGC】ChatGPT提示词Prompt精确控制指南:Sam Altman与Ilya Sutskever的建议详解
  • 动态规划——石子合并问题
  • C++加密解密问题解惑答疑