六一的部落格


关关难过关关过,前路漫漫亦灿灿。



可变长字符序列

模板类实例


头文件和命名空间

1#include <string>
2using std::string;

构造函数

1string s5 = "hiya";
2string s6("hiya");
3string s7(10, 'c'); // 10个'c'; 显式构造函数

操作


字符个数

返回类型
string::size_type 无符号整数类型;足够存放下任何string对象的大小
1string s("Hello");
2
3auto sz = s.size();
4decltype(s.size()) sz = s.size();
5// <=>
6string::size_type sz = s.size();

其他

os << s 输出运算符重载
is >> s 输入运算符重载
getline(is, s) 读取换行符但不保存
s.empty()
s.begin()
s.end()
s[n] 下标运算符;操作数类型为string::size_type;n大于等于0而小于s.size();因为不会进行下标检查,所以不安全;用以随机访问元素
s1 + s2 字符串连接
s1 = s2
s1 = s2
s1 != s2
<, <=, >, >= 和字典顺序以及长度有关

字面值和string对象相加

‘+‘运算符两侧的运算对象至少有一个是string类型;C风格字符串并不是标准库类型string的对象

 1string s1 = "hello", s2 = "world\n";
 2string s4 = s1 + ",";
 3
 4string s5 = "hello" + ",";            // 错误
 5
 6string s6 = s1 + "," + "world";
 7// <=>
 8string s6 = (s1 + ",") + "world";
 9
10string s7 = "hello" + "," + s2;        // 错误
11
12string s7 = "hello" + ("," + s2);       // 正确

示例

 1// 读取未知数量的string对象
 2
 3string word;
 4while (cin >> word)
 5{
 6    // Process
 7}
 8
 9// 使用getline读取一整行
10string line;
11while (getline(cin, line))
12{
13    // Process
14}
15
16// 遍历string对象中的字符序列
17for (auto &c : str)
18{
19    // Process
20    // 将变量c依次绑定到序列的每个元素上
21}
22
23for (auto c : str)
24{
25    // Process
26}
27
28// 因为index的类型,已经保证index一定大于等于0
29// 大多数类型重载了判等,少数类型才重载了小于
30for (decltype(s.size()) index = 0; index != s.size(); ++index)
31{
32    // Process
33}

头文件cctype

提供一组标准库函数,处理字符

-
isalnum(c) al指alpha,num指number;[a-z] [A-Z] [0-9]
isalpha(c) [a-z] [A-Z]
isdigit(c) [0-9]
islower(c) [a-z]
isupper(c) [A-Z]
isxdigit(c) 十六进制数字为真;[0-9] [a-f] [A-F]
isspace(c) 可打印空白为真;包括空格,横向制表符,纵向制表符,回车符,换行符,进纸符
iscntrl(c) cntrl指control;控制字符为真
isgraph(c) 有图形为真;可打印但非空格
isprint(c) 可打印为真
ispunct(c) 是标点符号为真;总集合包括:控制字符,数字,字母,标点符号,可打印空白
tolower(c) [A-z] -> [a-z];其他原样输出
toupper(c) [a-z] -> [A-Z];其他原样输出

标准库类型string


可变长字符序列

模板类实例


头文件和命名空间

1#include <string>
2using std::string;

构造函数

1string s5 = "hiya";
2string s6("hiya");
3string s7(10, 'c'); // 10个'c'; 显式构造函数

操作


字符个数

返回类型
string::size_type 无符号整数类型;足够存放下任何string对象的大小
1string s("Hello");
2
3auto sz = s.size();
4decltype(s.size()) sz = s.size();
5// <=>
6string::size_type sz = s.size();

其他

os << s 输出运算符重载
is >> s 输入运算符重载
getline(is, s) 读取换行符但不保存
s.empty()
s.begin()
s.end()
s[n] 下标运算符;操作数类型为string::size_type;n大于等于0而小于s.size();因为不会进行下标检查,所以不安全;用以随机访问元素
s1 + s2 字符串连接
s1 = s2
s1 = s2
s1 != s2
<, <=, >, >= 和字典顺序以及长度有关

字面值和string对象相加

‘+‘运算符两侧的运算对象至少有一个是string类型;C风格字符串并不是标准库类型string的对象

 1string s1 = "hello", s2 = "world\n";
 2string s4 = s1 + ",";
 3
 4string s5 = "hello" + ",";            // 错误
 5
 6string s6 = s1 + "," + "world";
 7// <=>
 8string s6 = (s1 + ",") + "world";
 9
10string s7 = "hello" + "," + s2;        // 错误
11
12string s7 = "hello" + ("," + s2);       // 正确

示例

 1// 读取未知数量的string对象
 2
 3string word;
 4while (cin >> word)
 5{
 6    // Process
 7}
 8
 9// 使用getline读取一整行
10string line;
11while (getline(cin, line))
12{
13    // Process
14}
15
16// 遍历string对象中的字符序列
17for (auto &c : str)
18{
19    // Process
20    // 将变量c依次绑定到序列的每个元素上
21}
22
23for (auto c : str)
24{
25    // Process
26}
27
28// 因为index的类型,已经保证index一定大于等于0
29// 大多数类型重载了判等,少数类型才重载了小于
30for (decltype(s.size()) index = 0; index != s.size(); ++index)
31{
32    // Process
33}

头文件cctype

提供一组标准库函数,处理字符

-
isalnum(c) al指alpha,num指number;[a-z] [A-Z] [0-9]
isalpha(c) [a-z] [A-Z]
isdigit(c) [0-9]
islower(c) [a-z]
isupper(c) [A-Z]
isxdigit(c) 十六进制数字为真;[0-9] [a-f] [A-F]
isspace(c) 可打印空白为真;包括空格,横向制表符,纵向制表符,回车符,换行符,进纸符
iscntrl(c) cntrl指control;控制字符为真
isgraph(c) 有图形为真;可打印但非空格
isprint(c) 可打印为真
ispunct(c) 是标点符号为真;总集合包括:控制字符,数字,字母,标点符号,可打印空白
tolower(c) [A-z] -> [a-z];其他原样输出
toupper(c) [a-z] -> [A-Z];其他原样输出