string s; | 定义一个新的空string 对象,命名为 s |
---|---|
string s(cp); | 定义一个新的 string 对象,用 cp 所指向的 C风格字符串初始化该对象 |
string s(s2); | 定义一个新的 string 对象,将其初始化为 s2 的副本 |
is >> s; | 从输入流 is 中读取一个以空白字符分隔的字符串,写入 s |
os << s; | 将 s 写入到输出流 os 中 |
getline( is, s); | 从输入流 is 中读取一行字符,写入 s |
s1+ s2; | 将 s1 和 s2 串接起来,产生一个新的 string 对象 |
s1 += s2; | 将 s2 拼接在 s1 后面 |
关系操作符 | == != < <= > >= |
string 可以看成字符容器,同 vector 一样,连续存储,支持 capacity 和 reserve 操作。
支持 begin 、 end、 erase、 clear 等操作,
但是,不支持 push_front、back、front 等操作。
string s("Hello world");
string::iterator iter = s.begin();
while(iter!=s.end())
cout << *iter++;
cout << endl;
string s(cp, n) | 创建一个string 对象,它被初始化为 cp 所指向数组的前 n 个元素的副本 |
---|---|
string s(s2, pos2) | 创建一个 string 对象, 它被初始化为一个已经存在的 string 对象 s2 中从下标 pos2 开始的字符串副本 如果 pos2 > s2.size(); 则操作未定义 |
string s(s2, pos2, len2) | 创建一个 string 对象 它被初始化为 s2 中从下标 pos2 开始的 len2 个字符的副本。 如果 pos2 > s2.size(); 则操作未定义 无论 len2 是多少,最多只能复制 s2.size() - pos2 个字符 |
string s1;
string s2(5, 'a');
string s3(s2);
string s4(s3.begin(), s3.begin() + s3.size()/2);
char *cp = "Hiya";
char c_array[] = "world!!!!";
char no_null[] = {'H', 'i'};
string s5(cp); // "Hiya"
string s6(c_array, 5); // "world"
string s7(c_array+5, 4); // "!!!!"
// 错误:string s8(no_null); no_null 不是空字符结尾
string s8(no_null, 2);
// 注意与 string s6(c_array, 5); 的区别
string s9(s5, 2); // "ya"
string s10(s5, 0, 2); // "Hi"
string s11(s5, 0, 100); // "Hiya"
s.insert(pos, n, c) | 在下标为 pos 的元素之前插入 n 个字符 c |
---|---|
s.insert(pos, s2) | 在下标为 pos 的元素之前插入 string 对象的副本 s2 |
s.insert(pos, s2, pos2, len) | 在下标为 pos 的元素之前插入 s2 中从下标 pos2 开始的 len 个字符 |
s.insert(pos, cp, len) | 在下标为 pos 的元素之前插入 cp 所指向的数组的前 n 个字符 |
s.insert(pos, cp) | 在下标为 pos 的元素之前插入 cp 所指向的以空字符结束的字符串的副本 |
s.assign(s2) | 用 s2 的副本替换 s |
s.assign(s2, pos2, len) | 用 s2 中从下标 pos2 开始的 len 个字符副本替换 s |
s.assign(cp, len) | 用 cp 指向的数组的前 len 个字符副本替换 s |
s.assign(cp) | 用 cp 指向的以空字符结束的字符串副本来替换 s |
s.erase(pos, len) | 删除从下标 pos 开始的 len 个字符 |