转自:http://www.cnblogs.com/zhaos/archive/2010/12/04/1896016.html
C++标准库string类型的操作总结
总结一下C++中string的操作,来自〈C++ Primer〉第四版。
1. string对象的定义和初始化:
1 string s1; // 空串
2 string s2(s1); // 将s2初始化为s1的一个副本
3 string s3( " value " ); // s3初始化并赋值
4 string s4(n, " c " ); // s4初始化,赋值为n个'c'
5 string s5(b,e); // 初始化s5为迭代器b,e范围内的副本
6 string s6(cp); // 用c风格的字符串初始化
7 string s7(cp,n); // cp前n个元素的副本
8 string s8(s2,pos2); // s8为s2从pos2开始到结尾的副本
9 string s9(s2,pos2,len2); // 同上,不过的长度为len2(不超过s2的长度)
10 // 其中有一种方法需要注意:
11 char no_null[] = { ' H ' , ' i ' };
12 string s10(no_null); // 错误,不是以null结尾的串
13 string s10(no_null, 2 ); // ok,可以自动添加null结尾
2. string的读写:
1 string s;
2 cin >> s;
3 cout << s << endl;
4 // 注意,cin是会被空白符截断的
5 // 要得到整行输入,采用while循环,或者:
6 getline(cin,s);
3.string的操作:
1 s.empty(); // 判断s是否为空,相当于s.size()==0
2 s.size(); // s的长度
3 s[n]; // n位置的字符(左值返回)
4 s1 + s2; // 返回s1和s2连接的串
5 s1 = s2; // 把s1替换为s2的副本
6 s1 == s2; // 判断s1,s2是否相等
7 != , < , <= , > , >= // 按字典顺序比较
8 // ==================
9 s.insert(p,t); // 在迭代器p指向的元素前插入t,返回指向t的迭代器
10 s.insert(p,n,t); // 同上,插入n个t,返回void
11 s.insert(p,b,e); // 插入迭代器b,e间的元素,返回void
12 s.insert(pos,n,c); // 在pos前插入n个字符c,返回s的引用
13 s.insert(pos,s2); // 在pos前插入s2,返回s的引用
14 s.insert(pos,s2,pos2,len);
15 // 在pos前插入s2中从pos2开始的len个字符,返回s的引用
16 s.insert(pos,cp,len);
17 // pos前插入cp数组(c风格字串)的前len个字符,返回s的引用
18 s.insert(pos,cp); // 在pos前插入cp,返回s的引用
19 // ==================
20 s.assign(b,e); // 用b,e间的元素替换s,返回s
21 s.assign(n,t); // 用n个t替换s,返回s
22 s.assign(s2); // 用s2的副本替换s,返回s的引用
23 s.assign(s2,pos2,len);
24 // 用s2从pos2开始的len长的副本替换s,返回s的引用
25 s.assign(cp,len) // 用cp的前len个字符副本替换s,返回s的引用
26 s.assign(cp) // 用cp的副本替换s,返回s的引用
27 // ==================
28 s.erase(p); // 删除迭代器p指向的元素,返回指向后一个元素的迭代器
29 s.erase(b,e); // 删除b,e间的元素,返回值同上
30 s.erase(pos,len); // 删除从pos开始的len个字符,返回s的引用
31 // ==================
32 s.substr(pos,n); // 返回s中从pos开始的n个字符组成的串
33 s.substr(pos); // 返回s中从pos开始到结尾的串
34 s.substr(); // 返回s的副本
35 // ==================
36 s.append(args); // 将args串接在s的后面,返回s的引用
37 // ==================
38 s.replace(pos,len,args);
39 // 删除s中从pos开始的len个字符,用args串替换,返回s的引用
40 // args不能为b2,e2
41 s.replace(b,e,args);
42 // 删除迭代器b,e范围内的字符,用args替换,返回s的引用
43 // args不能为s2,pos2,len2
44 // ==================append,replace的args的说明
45 s2 // string
46 s2,pos2,len2 // s2中下pos2开始的len2个字符
47 cp // c风格的串
48 cp,len2 // cp指向以空结束的前len2个字符
49 n,c // 字符c的n个副本
50 b2,e2 // 迭代器b2,e2范围内的所有字符
4.string的查找操作:
1 s.find(args); // args的第一次出现
2 s.rfind(args); // 最后一次出现
3 s.find_first_of(args); // args中任意字符的第一次出现
4 s.find_last_of(args); // args中任意字符的最后一次出现
5 s.find_first_not_of(args); // 查找第一个不属于args的字符
6 s.find_last_not_of(args); // 查找最后一个不属于args的字符
7 // =================args
8 c,pos = 0 // 查找字符c,默认从s的0位置开始
9 s2,pos = 0 // 查找s2
10 cp,pos = 0 // 查找cp(c风格字串)
11 cp,pos,n // 从s的pos开始查找cp的前n个字符,没有默认值
5.string的比较:
除了刚才提到的等号及不等号的比较,c++还提供了一个比较函数compare
1 s.compare(s2); // 比较s和s2
2 s.compare(pos1,n1,s2); // s从pos1开始的n1个字符与s2比较
3 s.compare(pos1,n1,s2,pos2,n2);
4 // s从pos1开始的n1个字符与s2从pos2开始的n2个字符比较
5 s.compare(cp); // 比较s和cp
6 s.compare(pos1,n1,cp); // s从pos1开始的n1个字符与cp比较
7 s.compare(pos1,n1,cp,n2); // s从pos1开始的n1个字符与cp的前n2个字符比较
8 // compare的返回值: >0 s大; <0 s小; =0 二者相等
6.cctype提供的字符判断函数:
需要包含头文件: #include<cctype>
1 isalnum(c); // true if c 是数字或字母
2 isalpha(c); // true if c 是字母
3 iscntrl(c); // true if c 是控制字符
4 isdigit(c); // true if c 是数字
5 isgraph(c); // true if c 不是空格但可打印
6 islower(c); // true if c 是标点符号
7 isprint(c); // true if c 是空白字符
8 ispunct(c); // true if c 是大写字母
9 isspace(c); // true if c 是空白字符
10 isupper(c); // true if c 是大写字符
11 isxdigit(c); // true if c 是十六进制数
12 tolower(c); // 将c转换为小写
13 toupper(c); // 将c转换为大写