标准C++ string类总结
头文件:#include<string>
缩写:
NBTS(null-terminated string):表示以空字符串结尾的C风格字符串;
string::nops:表示string字符串的结尾,一般为unsigned int的最大值;
构造函数:
1. string one("abcd");
2. string two(20, '$'); // 创建20个$的字符串
3. string three(one);
4. string four; // 长度为0
5. char alls[] = "abcdefg hijklmn!"; string five = (alls, 20); // 将alls指向字符串的前20个赋给five,即使超过边界
6. string six(alls+6, alls+10); // 将alls指向字符串的第7到第11个字符串赋给six
string seven(&five[6], &five[10]); // 将地址区间内的字符串赋给five
7. string eight(four, 7, 16); // 从four的第8个字符串开始,将16个字符串赋给eight
8. string nine = {'a', 'b', 'c', 'd'}; // C++11
string输入:
string stuff;
cin>>stuff; // 读入一个字符
getline(cin, stuff); // 读入一行,丢弃‘\n’
getline(cin, stuff, ':'); // 读到 ‘:’ 停止,丢弃‘:’
string读入的字符数受限于unsigned int的大小,或者string::nops;
字符串的比较:
string str1("cobra");
string str2("coral");
char str3[] = "anaconda";
if(str1 > str2)
...
if(str2 == str3)
...
if(str1 < str3)
...
str1.length()和str1.size()都返回字符数;
重载find()函数:
string str1("absdefg"); string str2("cd"); char str3[] = "hijklmn";
str1.find(str2, 3); // 从索引3开始查找str2在str1中首次出现的索引(从0开始,不是地址),否则返回string::nops
str1.find(str3, 4);
str1.find(str3, 0, 2); // 从索引0开始查找str3的前2个字符在str1中首次出现的索引
str1.find('a', 0); // 查找字符‘a’
string库还提供了其他相关方法:
rfind(); // 查找最后一次出现的位置
find_first_of(); // 查找参数中任何一个字符串出现的首索引
find_last_of(); // 查找参数中任何一个字符串出现的最后一个索引
find_first_not_of(); // 查找第一个不包含在参数中的字符首索引
find_last_not_of(); // 查找最后一个不包含在参数中的字符首索引
字符串string实际上分配比实际字符串大的内存块,一般是两倍,超过了之后重新new一个两倍的内存块;
capacity()返回string的内存块大小,与length()和size()不同,reserve(unsigned n)能让请求的内存块最小,但一般不是n,而是包含n的最小字节数的大小