[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++ 的开源库都喜欢自己实现 string?
在网上看了很多关于c++ std::string
的介绍,优缺点如下:
优点:
- 相较于之前的字符操作,封装了更多的实现
- 能够手动指定分配器,适配不同的内存资源
缺点:
- 性能不够高,没有基于不同的应用场景进行内存管理适配
- 还缺少很多字符串的操作,比如字符分离
关于替代std::string
的实现库,有如下参考:
- facebook/folly实现的
FBString
- Google abseil/abseil-cpp实现的
StringPiece