建议直接看C语言中文网的
其实 string 类是STL的 basic_string 模板实例化得到的模板类,定义如下:
typedef basic_string<char> string;
构造函数
string s1(); // si = ""
string s2("Hello"); // s2 = "Hello"
string s3(4, 'K'); // s3 = "KKKK"
string s4("12345", 1, 3); //s4 = "234",即 "12345" 的从下标 1 开始,长度为 3 的子串
string对象赋值
可以用 char* 类型的变量、常量,以及 char 类型的变量、常量对 string 对象进行赋值。例如:
string s1;
s1 = "Hello"; // s1 = "Hello"
s2 = 'K'; // s2 = "K”
assign 成员函数,可以用来对 string 对象赋值。assign 成员函数返回对象自身的引用,用法和构造函数一样
string s1("12345"), s2;
s3.assign(s1); // s3 = s1
s2.assign(s1, 1, 2); // s2 = "23",即 s1 的子串(1, 2)
s2.assign(4, 'K'); // s2 = "KKKK"
s2.assign("abcde", 2, 3); // s2 = "cde",即 "abcde" 的子串(2, 3)
字符串的长度
s.size()
或
s.length()
字符串的连接
可以用+ 或 += 连接,
也可以用append()成员函数连接 ,用法和构造函数差不多
string对象比较
<、<=、==、!=、>=、> 运算符比较 string 对象
compare
成员函数比较
- 小于 0 表示当前的字符串小;
- 等于 0 表示两个字符串相等;
- 大于 0 表示另一个字符串小。
求string对象的子串
substr(n,m)
成员函数,截取从下标n开始的m个字符
交换两个字符串的内容
s1.swap(s2);
查找子串和字符
查找结果都是子串或字符在string对象中的下标。如果查不到,则返回 string::npos
。string: :npos
是在 string 类中定义的一个静态常量。数值为:18446744073709551615
- find:从前往后查找子串或字符出现的位置。
- rfind:从后往前查找子串或字符出现的位置。
- find_first_of:从前往后查找何处出现另一个字符串中包含的字符。例如:
s1.find_first_of(“abc”); //查找s1中第一次出现"abc"中任一字符的位置 - find_last_of:从后往前查找何处出现另一个字符串中包含的字符。
- find_first_not_of:从前往后查找何处出现另一个字符串中没有包含的字符。
- find_last_not_of:从后往前查找何处出现另一个字符串中没有包含的字符。
替换子串
replace(n,m,s,nn,mm)
成员函数:用s
串从下标nn长度为mm的子串,替换原串的从n开始长度为m的子串
s,nn,mm
这一段的的写法和构造函数一致
删除子串
erase(n,m)
成员函数:删除从下标 n 开始长度 m 的子串,没有指定 m 则到结尾
插入字符串
insert(n,s,nn,mm)
成员函数:从下标 n 开始,插入 s 串的 nn 开始长度为 mm 的子串
insert(n,s)
从下标 n 开始插入 s 串
insert(n,x,char)
从下标 n 开始插入 x 个 char
string对象也可以用stl算法操作
string对象可以看成顺序容器,支持随机访问迭代器。
注:
next_permutation(s.begin(),s.end());
可以使字符串变为下一个排列
prev_permutation(s.begin(),s.end());
可以使字符串变为前一个排列
他们的返回值都是是否有下/前一个排列