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

c++ #include <string> 介绍

#include <string> 是 C++ 中用于包含 std::string 类的头文件。std::string 是 C++ 标准库中的一个类,提供了一种方便和强大的方式来处理文本字符串。它是 C++ 标准库中的常用工具,用来替代 C 语言中的字符数组(char[])来进行字符串操作。

1. #include <string>

  • #include:预处理指令,用于在编译时将指定的头文件内容插入到源文件中。
  • <string>:C++ 标准库中的头文件,包含了 std::string 类的定义和实现。

2. std::string 类

std::string 是一个封装好的类,提供了比传统 C 风格字符串(char[])更高级的字符串操作。C++ 标准库中的 std::string 类位于 std 命名空间中。

3. 常用的 std::string 成员函数

  • 构造函数:可以从 C 风格字符串、另一个字符串、字符等创建 std::string 对象。

std::string s1("Hello"); // 通过 C 字符串构造
std::string s2 = s1;     // 拷贝构造
std::string s3(5, 'a');  // 创建一个包含 5 个字符 'a' 的字符串

长度和大小

  • size() 或 length() 返回字符串的长度(字符数)。
std::string s = "Hello";
size_t len = s.size();  // len = 5

字符串拼接

  • 可以使用 + 运算符或 append() 函数将两个字符串拼接在一起。
std::string s1 = "Hello";
std::string s2 = " World";
std::string s3 = s1 + s2;  // "Hello World"

查找和子串

  • find() 用于查找子字符串的位置,substr() 用于提取子字符串。
std::string s = "Hello World";
size_t pos = s.find("World");  // pos = 6
std::string sub = s.substr(0, 5);  // sub = "Hello"

比较

  • std::string 提供了 ==!=< 等运算符来比较字符串的内容。
std::string s1 = "abc";
std::string s2 = "def";
if (s1 == s2) {
    // 比较字符串内容
}

4.使用示例

#include <iostream>
#include <string>

int main() {
    std::string greeting = "Hello";
    std::string name = "Alice";
    std::string message = greeting + ", " + name + "!";  // 字符串拼接

    std::cout << message << std::endl;  // 输出: Hello, Alice!

    // 查找子字符串
    size_t pos = message.find("Alice");
    if (pos != std::string::npos) {
        std::cout << "'Alice' found at position: " << pos << std::endl;
    }

    return 0;
}

5. std::string 与 C 风格字符串的区别

  • 自动管理内存std::string 会自动管理内存分配和释放,避免手动管理内存带来的潜在问题。
  • 更安全std::string 通过类的封装,提供了更多的安全性和方便性,避免了 C 风格字符串常见的缓冲区溢出等问题。
  • 更丰富的功能std::string 提供了丰富的成员函数,可以方便地进行字符串的操作(如查找、替换、拼接、比较等),而 C 风格字符串则需要依赖函数库(如 strlen()strcpy() 等)。


http://www.kler.cn/a/307203.html

相关文章:

  • 软件工程的基础和核心理论概念
  • 【架构论文-1】面向服务架构(SOA)
  • leetcode day10 动态规划篇 64+139
  • day60 图论章节刷题Part10(Floyd 算法、A * 算法)
  • 【LLM】3:从零开始训练大语言模型(预训练、微调、RLHF)
  • 2024年11月7日Github流行趋势
  • Java 之 IO流
  • Java读取寄存器数据的方法
  • memo和useMemo的区别
  • Js中的pick函数
  • 【Python基础】Python 装饰器(优雅的代码增强工具)
  • 如何通过Chrome浏览器轻松获取视频网站的TS文件
  • 什么是交换机级联?
  • 使用Python生成多种不同类型的Excel图表
  • HTML5元素定位
  • 小米,B站网络安全岗位笔试题目+答案
  • 借老系统重构我准备写个OpenAPI3.1版的API管理工具(附录屏演示)
  • 快手自研Spark向量化引擎正式发布,性能提升200%
  • MySQL基础(11)- 创建管理表
  • bug 记录 - animation 在 IOS机型掉帧情况
  • Web安全之HTTPS调用详解和证书说明案例示范
  • Ubuntu 安装包下载(以20版本 阿里镜像站为例子)
  • 非凸科技钻石赞助第四届Rust China Conf 2024
  • (南京观海微电子)——GH7006+Boe_6.8_AV068WVU-N10原理介绍
  • 数据清洗-缺失值填充-K-NN算法(K-Nearest Neighbors, K-NN算法)
  • STM32与ESP8266的使用