C++ 中的string容器

本文详细介绍了C++中的string容器,包括其基本概念、构造函数、赋值操作、字符串拼接、查找和替换功能,以及获取子串和比较字符串的方法。
摘要由CSDN通过智能技术生成

C++ 中的 string 容器

什么是 string

  • string 是一个封装了动态字符串的类,它允许您处理文本数据。
  • 与 C 语言中的字符数组相比,string 提供了更多功能,例如自动管理内存、字符串拼接、查找、替换等。

基本概念

  1. 本质

    • string 是 C++ 风格的字符串,本质上是一个类。
    • 它内部封装了 char*,管理字符串的存储,是一个 char* 型的容器。
    • 与 C 语言中的字符指针 char* 不同,string 是一个类,具有更多功能。
  2. 特点

    • string 类内部封装了许多成员方法,例如查找、拷贝、删除、替换、插入等。
    • 管理 char* 所分配的内存,不用担心复制越界和取值越界等问题。

构造函数

以下是 string 容器的一些构造函数:

  1. string(): 创建一个空的字符串。
  2. string(const char* s): 使用 C 风格字符串 s 初始化。
  3. string(const string& str): 使用另一个 string 对象初始化。
  4. string(int n, char c): 使用 n 个字符 c 初始化。

示例:

#include <string>

void test01() {
    string s1; // 创建空字符串,调用无参构造函数
    const char* str = "hello world";
    string s2(str); // 把 C 风格字符串转换成了 string
    string s3(s2); // 调用拷贝构造函数
    string s4(10, 'a'); // 创建包含 10 个字符 'a' 的字符串
}

赋值操作

  1. string 字符串进行赋值:
    • string& operator=(const char* s): 将 C 风格字符串赋给当前字符串。
    • string& operator=(const string& s): 将字符串 s 赋给当前字符串。
    • string& operator=(char c): 将字符赋给当前字符串。
    • string& assign(const char* s): 将 C 风格字符串赋给当前字符串。
    • string& assign(const char* s, int n): 将字符串 s 的前 n 个字符赋给当前字符串。
    • string& assign(const string& s): 将字符串 s 赋给当前字符串。

示例:

// 赋值
void test02() {
    string str1;
    str1 = "hello world"; // 赋值操作
    string str2;
    str2 = str1;
    string str3;
    str3 = 'a'; // 字符赋值
    string str4;
    str4.assign("hello C++"); // 使用字符串赋值
    string str5;
    str5.assign("hello C++", 5); // 使用部分字符串赋值
    string str6;
    str6.assign(str5); // 使用拷贝构造函数
}

字符串拼接

  1. 在字符串末尾拼接字符串:
    • string& operator+=(const char* str): 重载 += 操作符。
    • string& operator+=(const char c): 重载 += 操作符。
    • string& operator+=(const string& str): 重载 += 操作符。
    • string& append(const char* s): 将字符串 s 连接到当前字符串结尾。
    • string& append(const char* s, int n): 将字符串 s 的前 n 个字符连接到当前字符串结尾。
    • string& append(const string& str): 将字符串 str 连接到当前字符串结尾。
    • string& append(const string& str, int pos, int n): 将字符串 str 中从位置 pos 开始的 n 个字符连接到当前字符串结尾。

示例:

// 字符串拼接
void test03() {
    string str1 = "hello";
    str1 += " world"; // 使用 += 操作符拼接字符串
    str1 += '!'; // 拼接字符
    string str2 = " C++";
    str1.append(str2); // 使用 append() 方法拼接字符串
    str1.append(str2, 0, 2); // 拼接部分字符串
}

字符串查找和替换

  1. 查找:

    • int find(const char* s, int pos = 0) const: 在当前字符串中查找字符串 s,返回第一次出现的位置。
    • int find(const string& str, int pos = 0) const: 在当前字符串中查找字符串 str,返回第一次出现的位置。
    • int rfind(const char* s, int pos = npos) const: 在当前字符串中从后往前查找字符串 s,返回最后一次出现的位置。
    • int rfind(const string& str, int pos = npos) const: 在当前字符串中从后往前查找字符串 str,返回最后一次出现的位置。
  2. 替换:

    • string& replace(int pos, int n, const char* s): 用字符串 s 替换从位置 pos 开始的 n 个字符。
    • string& replace(int pos, int n, const string& str): 用字符串 str 替换从位置 pos 开始的 n 个字符。

示例:

// 字符串查找和替换
void test04() {
    string str = "hello world, hello C++!";
    int pos = str.find("hello"); // 查找第一次出现的位置
    int rpos = str.rfind("hello"); // 从后往前查找最后一次出现的位置
    str.replace(pos, 5, "hi"); // 替换
}

其他常用操作

  1. 获取子串:

    • string substr(int pos, int n) const: 返回从位置 pos 开始的 n 个字符组成的子串。
  2. 比较:

    • int compare(const char* s) const: 比较当前字符串和字符串 s
    • int compare(const string& str) const: 比较当前字符串和字符串 str

示例:

// 其他常用操作
void test05() {
    string str = "hello world";
    string sub = str.substr(6, 5); // 获取子串
    int cmp = str.compare("hello"); // 比较字符串
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁子希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值