标准库类型string
2023年12月14日 2023年12月22日
可变长字符序列
模板类实例
头文件和命名空间
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];其他原样输出 |