本文共 2047 字,大约阅读时间需要 6 分钟。
C++中的string类是一个强大的字符串操作容器,基于标准库的basic_string模板类实现。本节将详细介绍string类的特点、常用操作及应用场景。
string类提供了丰富的内置操作和功能,与标准容器接口相似,但专注于处理字符串类型数据。它具备以下核心特点:
1. 内置的字符串操作接口,简化了字符串常用操作
2. 支持快速的字符串拼接和修改操作3. 提供高效的内存管理功能,减少内存碎片问题4. 可扩展和定制内存分配策略string类的构造方法庞大但灵活,旨在支持多种字符串创建场景。常见的构造方式包括:
1. 空构造:string()
- 创建空字符串
string(const char* s)
- 使用C字符串构造3. 重复字符构造 :string(size_t n, char c)
- 生成由字符c重复n次组成的字符串4. 拷贝构造 :string(const string& s)
- 拷贝另一个string对象的内容 示例代码:int main(){ string s0; // 空字符串 string s1("Hello world!"); // 使用C字符串构造 string s2(s1); // 拷贝构造 // 其他构造方式同理 return 0;}
string类提供了丰富的容量管理功能,主要包括:
1. 内容长度查询:size() && length()
- 返回字符串的有效字符长度
empty()
- 判断字符串是否为空3. 内容清空:clear()
- 释放字符串中的内容4. 预留空间:reserve(size_t n)
- 为string预留额外的空间5. 调整大小:resize(size_t n, char fill = char())
- 根据需求调整字符串大小 示例代码:int main(){ string s1("Hello world!"); // 创建字符串 cout << "s1的原始长度:" << s1.size() << endl; // 输出有效字符个数 cout << "s1的容量(包括成功字符和空白):" << s1.capacity() << endl;
s1.resize(9); // 调整到9个字符cout << "调整后的大小:" << s1.size() << endl;// 启发空字符串的其他操作string s2, s3;s2.reserve(20); // 预留空间s3.resize(20, '*'); // 创建由*填充的长字符串return 0;
}
string类提供了多种修改字符串的方法,包括:
1. 添加字符:push_back(char c)
- 在末尾添加一个字符
pop_back()
- 从末尾删除一个字符3. 查找字符:find(const char* sub, size_t n = string::npos)
- 寻找子字符串位置4. 替换字符:replace(size_t pos, size_t len, const char* sub)
- 替换指定位置的字符 示例代码:int main(){ string s1("Hello world!");
// 添加一个感叹号s1.push_back('!');cout << s1 << endl; // 输出修改后的字符串
<>();
// 删除最后一个字符s1.pop_back();cout << s1 << endl;// 查找子字符串size_t pos = s1.find("lo");if (pos != string::npos){ cout << "找到'lo'的位置:" << pos << endl;}else{ cout << "未找到指定子串" << endl;}return 0;
}
string类在许多开发场景中发挥重要作用,以下是一些典型示例:
示例代码:int StrToInt(string s){ int num = 0; auto it = s.begin(); while (it != s.end()) { num *= 10; num += (*it - '0'); ++it; } return num;}
示例代码:// 字符串逆置string Reverse(string s){ int start = 0, end = s.size() - 1; while (start < end) { swap(s[start], s[end]); ++start; --end; } return s;}
转载地址:http://fmzaz.baihongyu.com/