字符串

在 C++ 中,字符串主要通过 std::string 类来管理和操作。std::string 是标准库提供的一个类,封装了对字符串的管理功能,允许我们以一种更高效且易于使用的方式处理字符串。

C++ 中的 std::string 内容

  1. 存储方式

    • std::string 底层实际上是动态分配的字符数组,并且通过类的封装实现自动内存管理。它可以根据需要自动调整大小,不必像 C 中的 char[] 那样需要开发者手动分配内存。

    • std::string 中的字符串数据是以连续的字符存储在内存中的,可以通过下标访问每个字符。

    例如:

    std::string str = "Hello";
    char firstChar = str[0];  // 访问第一个字符 'H'
  2. 自动管理内存

    • std::string 会根据字符串的长度自动管理内存。它的大小可以根据字符串的变化自动增长或缩小,因此无需担心溢出或内存分配问题。

    例如:

    std::string str = "Hello";
    str += ", World!";  // 自动扩展内存,不需手动管理
  3. 字符串操作的成员函数 std::string 提供了许多内置的成员函数来操作字符串,包括:

    • 获取长度

      std::string str = "Hello";
      size_t len = str.length();  // 返回字符串的长度
    • 拼接字符串

      std::string str1 = "Hello";
      std::string str2 = " World";
      std::string result = str1 + str2;  // 拼接字符串,结果为 "Hello World"
    • 查找子串

      std::string str = "Hello World";
      size_t pos = str.find("World");  // 查找 "World" 在字符串中的位置
    • 获取子串

      std::string str = "Hello World";
      std::string sub = str.substr(6, 5);  // 提取从索引 6 开始的 5 个字符,结果为 "World"
    • 替换字符串

      std::string str = "Hello World";
      str.replace(6, 5, "C++");  // 把 "World" 替换为 "C++",结果为 "Hello C++"
  4. 与 C 风格字符串的互操作性

    • std::string 可以很方便地与 C 风格字符串(char*const char*)互相转换:

      • std::string 转换为 C 风格字符串:

        std::string str = "Hello";
        const char* c_str = str.c_str();  // 转换为 C 风格字符串
      • C 风格字符串转换为 std::string

        const char* c_str = "Hello";
        std::string str = c_str;  // 从 C 风格字符串构造 std::string
  5. 运算符重载

    • std::string 支持常见运算符,如 +(用于拼接)、==(用于比较)等。例如:

      std::string str1 = "Hello";
      std::string str2 = "World";
      std::string result = str1 + " " + str2;  // 结果为 "Hello World"
      
      if (str1 == "Hello") {
          // 比较字符串内容是否相等
      }
  6. 遍历字符串 可以使用下标或者迭代器遍历 std::string 中的字符:

    std::string str = "Hello";
    // 使用下标
    for (size_t i = 0; i < str.size(); ++i) {
        std::cout << str[i] << " ";
    }
    
    // 使用迭代器
    for (auto it = str.begin(); it != str.end(); ++it) {
        std::cout << *it << " ";
    }
  7. 动态扩展与收缩

    • 由于 std::string 是动态内存分配的,因此在字符串内容变化时,长度可以自动调整,而不需要手动处理内存分配或释放。

    • 成员函数 resize() 也可以手动改变字符串的大小:

      std::string str = "Hello";
      str.resize(10, 'X');  // 将字符串扩展为长度 10,用 'X' 填充新位置,结果为 "HelloXXXXX"

总结

C++ 中的 std::string 是一个功能强大、易于使用的字符串处理工具。与 C 中的 char[] 相比,它提供了自动内存管理、更丰富的操作功能以及与 C 风格字符串的良好兼容性,使得字符串操作更加安全、高效和灵活。

字符串的操作以后就使用了C++的方式,除了字符数组,有时候需要使用的时候就用一下。

Last updated