标准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的最小字节数的大小

posted @ 2018-10-25 21:34  奉旨睡觉  阅读(525)  评论(0)    收藏  举报