[c++11]字符串类型

参考:std::string

字符串是表示字符序列的对象

标准字符串类提供对此类对象的支持,其接口类似于标准字节容器的接口,但添加了专门设计用于操作单字节字符的字符串的功能

头文件

#include <string>

使用

int main() {
    // 创建
    std::string str;
    str = "abcde";

    // 查询
    // 长度
    std::cout << str.length() << std::endl;
    // 指定位置字符 第3个字符
    std::cout << str.at(2) << std::endl;
    // 使用find*方法查询
    std::cout << str.find('c') << std::endl;

    // 修改
    // 连接另一个字符串
    str += "fg";
    str.append("hij");
    // 连接一个字符
    str.push_back('k');
    std::cout << str << std::endl;
    // 修改其中的字符 修改第3个字符为z
    str.replace(2, 1, "z");
    std::cout << str << std::endl;

    // 删除
    // 删除第2-4个位置的字符
    str.erase(1, 3);
    std::cout << str << std::endl;

    // 复制
    // 复制子字符串"ijk"到字符数组
    char buffer[20];
    std::size_t length = str.copy(buffer, 3, 5);
    buffer[length] = '\0';
    std::cout << "buffer contains: " << buffer << '\n';

    // 转换
    // 转换字符串为字符数组
    const char *arrs = str.c_str();
    std::cout << arrs << std::endl;
    // 转换字符数组为字符串
    std::cout << std::string(buffer) << std::endl;
}

优缺点

参考:

C++ std::string 有什么优点?

C++ 的 std::string 有什么缺点?

为什么大多数的 C++ 的开源库都喜欢自己实现 string?

在网上看了很多关于c++ std::string的介绍,优缺点如下:

优点:

  1. 相较于之前的字符操作,封装了更多的实现
  2. 能够手动指定分配器,适配不同的内存资源

缺点:

  1. 性能不够高,没有基于不同的应用场景进行内存管理适配
  2. 还缺少很多字符串的操作,比如字符分离

关于替代std::string的实现库,有如下参考:

  1. facebook/folly实现的FBString
  2. Google abseil/abseil-cpp实现的StringPiece