(C++ primer读书笔记)2013.3.18 zzy @B309
C++标准库提供string类型,支持长度可变的字符串。使用时要包含头文件string,还要对名字string做using声明。
1 #include <string>
2
3 using std::string;
初始化:string标准库支持几个构造函数,在没有指明对象初始化式时,系统使用默认构造函数。
1 string s1; 默认构造函数,s1为空串
2
3 string s2(s1); 将s2初始化为s1的一个副本
4
5 string s3(“value”); 将s3初始化为一个字符串子面值的副本
6
7 string s4(n, ‘c’); 将s4初始化为n个字符’c’构成的字符串
输入输出:string对象用标准输入cin读,用标准输出cout写,下面是几种典型实践:
1.用标准输入/输出操作符:>> and <<:
1 string s;
2
3 cin >> s;
4
5 cout << s << endl;
输入操作符>>在读取string类型时:
·读取并忽略开头所有的空白字符(空格、换行符、制表符);
·读取字符直至再次遇到空白字符,读取终止。
2.读入未知数目string对象:
1 string word;
2
3 //read until end-of-file,writing each word to a new line.
4
5 while(cin >> word)
6
7 cout << word << endl;
3.用getline函数读取整行文本:
1 string line;
2
3 //read line at time until end-of-file
4
5 while(getline(cin, line))
6
7 cout << line << endl;
getline函数接受两个参数:一个输入流对象,一个string对象。getline一次读取一行,遇到换行符停止。行尾的换行符也会读取,但是换行符不会存入string对象中。getline不会忽略行开头的换行符,如果第一个字符就是换行符,那么getline函数也将停止读入并返回,此时string对象被置为空string。
测试下面两个完整的程序对行开头/结尾的空白字符(空格、制表符、换行符)的处理,特别是行开头处的换行符:
程序清单1:
1 #include<iostream>
2
3 #include<string>
4
5 // or use “using namespace std;” instead
6
7 using std::cin;
8
9 using std::cout;
10
11 using std::endl;
12
13 using std::string;
14
15 int main()
16
17 {
18
19 string word;
20
21 while(cin >> word)
22
23 cout << "BEGIN-" << word << "-END" << endl;
24
25 return 0;
26
27 }
程序清单2:
1 #include<iostream>
2
3 #include<string>
4
5 // or use “using namespace std;” instead
6
7 using std::cin;
8
9 using std::cout;
10
11 using std::endl;
12
13 using std::string;
14
15 int main()
16
17 {
18
19 string line;
20
21 while(getline(cin, line))
22
23 cout << "BEGIN-" << line << "-END" << endl;
24
25 return 0;
26
27 }
string对象的操作:
1.成员函数size()返回string对象中字符的个数,返回类型为string::size_type(与unsigned具有相同含义)。
2.成员函数empty()测试string对象是否为空,返回bool型。
1 string s(“zzy@Library”);
2
3 cout << s.size() << endl;
4
5 if(s.empty())
6
7 cout << “empty!” << emdl;
3.关系运算:== != < <= >= >,比较两个string对象的大小或相等关系,表达式返回的是bool类型。
关系操作符比较两个string对象时采用了和(大小写敏感的)字典排序相同的策略:
·如果两个string对象长度相同,且对应字符相同,那么它们是相等的;
·如果两个string对象长度不同,且短的string对象是长的string对象的前缀,则短的string对象小;
·比较两个string对象出现的第一个不同的字符。
4.赋值操作
可以把一个string对象赋值给另一个string对象,也可以把一个字符串字面值赋值给一个string对象
1 string s1,s2;
2
3 s1 = “zzy @ Library”;
4
5 s2 = s1;
5.string对象的加法被定义成连接。两个string对象可以通过’+’操作符或”+=”操作符连接成一个string对象。string对象还可以和字符串字面值连接,’+’操作符的两个操作数中至少有一个要是string对象,表达式返回一个string对象。
‘+’操作符两个操作数中有一个是string对象,另一个还可以是单个字符,或数字,数字按ASCII码转换成相应字符。
程序清单3
1 #include<iostream>
2
3 #include<string>
4
5 //or use “using namespace std;” instead
6
7 using std::cin;
8
9 using std::cout;
10
11 using std::endl;
12
13 using std::string;
14
15 int main()
16
17 {
18
19 string s1 = "zzy", s2 = " @ ", s3 = "Library!\n";
20
21 string s4 = s1 + s2 + s3;
22
23 cout << s4;
24
25 string s5 = "IF " + s4 + "coding " + "ENDIF";
26
27 cout << s5;
28
29 return 0;
30
31 }
6.string对象通过[ ]下标操作符访问每个元素,范围是0 - (size() - 1),C++标准库对访问越界不做检查。
1 string s = "zzy @ Library4D";
2
3 for(string::size_type i = 0; i != s.size(); ++i)
4
5 cout << s[i];
6
7 cout << endl;
8
9
10
11 for(int i = -1; i <= 20; ++i)
12
13 cout << s[i];
14
15 cout << endl;
16
17
18
19 for(int i = 0; i < s.size(); ++i)
20
21 s[i] = '$';
22
23 cout << s << endl;
原文链接: https://www.cnblogs.com/Lattexiaoyu/archive/2013/03/18/2966835.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/81050
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!