string
string简介:string就是字符串加上对字符串的函数组成的。
string容器拥有自动扩容功能,但是不同的编译器扩容的大小不同,大多数编译器采用了二倍扩容。
string的初始化:
一共有四种形式:
string() (重点) | (重点) 构造空的string类对象,即空字符串 |
string(const char* s) | 用C-string来构造string类对象 |
string(size_t n, char c) | string类对象中包含n个字符c |
string(const string&s) | 拷贝构造函数 |
string的迭代器起始位置
-
begin() 迭代器:
string.begin()
返回指向第一个元素的迭代器。- 例如,如果
v
是一个std::string
,则v.begin()
返回一个指向第一个元素的迭代器。
-
cbegin() 迭代器:
string.cbegin()
返回一个常量迭代器,指向第一个元素。- 这意味着通过
cbegin()
返回的迭代器不能用于修改元素的值。
-
rbegin() 迭代器:
string.rbegin()
返回一个逆向迭代器,指向最后一个元素。- 逆向迭代器允许从容器的末尾向前迭代。
-
crbegin() 迭代器:
string.crbegin()
返回一个常量逆向迭代器,指向最后一个元素。- 类似于
cbegin()
,这意味着它提供的是一个不能修改元素的视图。
string容器的容量及其长度计算:
-
size() 和 length():
size()
和length()
方法都返回字符串中字符的数量。- 示例:
std::string str = "Hello"; std::cout << "Size: " << str.size() << std::endl; // 输出:5 std::cout << "Length: " << str.length() << std::endl; // 输出:5
-
max_size():
max_size()
方法返回字符串能够包含的最大字符数。- 示例:
std::string str = "Hello"; std::cout << "Max size: " << str.max_size() << std::endl;
-
capacity():
capacity()
方法返回当前分配给字符串的存储空间大小(即内存容量),以字节为单位。- 示例:
std::string str = "Hello"; std::cout << "Capacity: " << str.capacity() << std::endl;
-
resize():
resize()
方法可以改变字符串的长度,可能会导致内存重新分配。- 示例:
std::string str = "Hello"; str.resize(8); // 将字符串长度改变为 8
-
reserve():
reserve()
方法请求字符串预留一定的存储空间,可以减少频繁的内存分配操作。- 示例:
std::string str = "Hello"; str.reserve(20); // 预留至少能容纳 20 个字符的空间
-
shrink_to_fit():
shrink_to_fit()
方法尝试减少字符串的容量,使其与当前存储的字符数相匹配。- 示例:
std::string str = "Hello"; str.resize(3); // 缩短字符串长度到 3 str.shrink_to_fit(); // 尝试释放多余的内存空间
-
clear() 和 empty():
clear()
方法清空字符串内容,使其成为空字符串。empty()
方法检查字符串是否为空,返回true
或false
。- 示例:
std::string str = "Hello"; str.clear(); // 清空字符串内容 bool isEmpty = str.empty(); // 检查字符串是否为空
对string容器进行修改
-
operator+=:
operator+=
是重载的运算符,用于将字符串或字符追加到现有字符串的末尾。- 示例:
std::string str = "Hello"; str += " World"; // 追加字符串
-
append():
append()
方法用于将指定字符串的一部分或整个字符串追加到当前字符串的末尾。- 示例:
std::string str = "Hello"; str.append(" World"); // 追加字符串
-
push_back():
push_back()
方法用于将字符追加到字符串的末尾。- 示例:
std::string str = "Hello"; str.push_back('!'); // 追加字符
-
assign():
assign()
方法用于替换字符串的内容,可以指定要复制的字符串、子字符串或者重复的字符。- 示例:
std::string str = "Hello"; str.assign("Goodbye"); // 替换整个字符串内容
-
insert():
insert()
方法用于在指定位置插入字符串、子字符串或字符。- 示例:
std::string str = "Hello"; str.insert(5, " World"); // 在位置5插入字符串
-
erase():
-
erase(size_type pos = 0, size_type count = npos):
- 从指定位置
pos
开始移除count
个字符。 - 如果
count
超过了可用字符数,则移除从pos
开始到字符串末尾的所有字符。 - 如果
pos
超出了字符串的大小,会抛出std::out_of_range
异常。
std::string str = "Hello, world!"; str.erase(7, 6); // 从位置7开始,移除6个字符,结果为 "Hello!"
- 从指定位置
-
iterator erase(const_iterator position):
- 移除由迭代器
position
指定的单个字符。 - 返回一个指向被移除字符后面的字符的迭代器。
std::string str = "Hello, world!"; auto it = str.begin() + 5; str.erase(it); // 移除 'w',结果为 "Hello world!"
- 移除由迭代器
-
iterator erase(const_iterator first, const_iterator last):
- 移除从迭代器
first
指向的位置开始,到迭代器last
指向的位置之前(不包括last
指向的位置)的所有字符。 - 返回一个指向被移除字符后面的字符的迭代器。
std::string str = "Hello, world!"; auto it1 = str.begin() + 7; auto it2 = str.begin() + 12; str.erase(it1, it2); // 移除 ", world",结果为 "Hello!"
- 移除从迭代器
-
-
replace():
replace()
方法用于替换字符串的一部分内容,从指定位置开始,用指定长度的字符串或字符替换。- 示例:
cppCopy Code
std::string str = "Hello"; str.replace(2, 3, "abc"); // 从位置2开始,替换3个字符为 "abc"
-
swap():
swap()
方法用于交换两个字符串的内容。- 示例:
cppCopy Code
std::string str1 = "Hello"; std::string str2 = "World"; str1.swap(str2); // 交换两个字符串的内容
-
pop_back():
pop_back()
方法用于移除字符串末尾的字符。- 示例:
cppCopy Code
std::string str = "Hello"; str.pop_back(); // 移除末尾的字符 'o'
string的成员函数
-
c_str():
- 返回一个指向以 null 结尾的 C 字符串 (
const char*
) 的指针,该字符串是当前std::string
对象中字符序列的副本。 - 这允许
std::string
对象与使用 C 风格字符串的函数进行互操作。
- 返回一个指向以 null 结尾的 C 字符串 (
-
data():
- 返回一个指向字符串中第一个字符的指针 (
char*
)。 - 与
c_str()
不同,data()
不会添加 null 终止符,因此返回的指针可以用于修改字符串的内容。
- 返回一个指向字符串中第一个字符的指针 (
-
get_allocator():
- 返回用于分配
std::string
内部存储的分配器对象。
- 返回用于分配
-
copy():
- 将字符串中的一段字符复制到另一个字符数组中。
- 接受目标字符数组的指针和要复制的字符数作为参数,并返回实际复制的字符数。
-
find():
- 在字符串中查找指定的子串或字符。
- 返回找到的第一个匹配子串或字符的位置,如果找不到则返回
std::string::npos
。
-
rfind():
- 在字符串中从末尾开始查找指定的子串或字符。
- 返回找到的最后一个匹配子串或字符的位置,如果找不到则返回
std::string::npos
。
-
find_first_of():
- 在字符串中查找第一个匹配给定字符集合中任何一个字符的位置。
- 返回找到的第一个匹配字符的位置,如果找不到则返回
std::string::npos
。
-
find_last_of():
- 在字符串中从末尾开始查找第一个匹配给定字符集合中任何一个字符的位置。
- 返回找到的最后一个匹配字符的位置,如果找不到则返回
std::string::npos
。
-
find_first_not_of():
- 在字符串中查找第一个不在指定字符集合中的字符的位置。
- 返回找到的第一个不匹配字符的位置,如果找不到则返回
std::string::npos
。
-
find_last_not_of():
- 在字符串中从末尾开始查找第一个不在指定字符集合中的字符的位置。
- 返回找到的最后一个不匹配字符的位置,如果找不到则返回
std::string::npos
。
-
substr():
- 返回一个新的字符串,其中包含从指定位置开始的指定长度的字符序列。
- 参数是起始位置和要复制的字符数,如果未指定字符数,则复制从起始位置到字符串末尾的所有字符。
-
compare():
- 比较当前字符串与另一个字符串或字符数组。
- 返回一个整数,指示两个字符串的相对大小(小于、等于或大于)。