File tree Expand file tree Collapse file tree 1 file changed +60
-1
lines changed
Expand file tree Collapse file tree 1 file changed +60
-1
lines changed Original file line number Diff line number Diff line change @@ -1040,4 +1040,63 @@ void g(vector<int>& v) {
10401040- 使用 ranges 时,显式限定算法名称。
10411041- 如有可能,尽量用 import 模块代替 ` #inclued ` 头文件。
10421042
1043- #todo
1043+ ## 第10章 字符串和正则表达式
1044+
1045+ C++ 有 string 类型,也有 string_view 类型——以容器方式访问字符序列,不论是在 std::string 还是 ` char[] ` 。
1046+
1047+ string 和 regex 都支持多种字符类型比如说 unicode.
1048+
1049+ ### string 类型
1050+
1051+ 用 + 可以对字符串进行链接。string 定义了移动构造函数,所以用传值方式返回也同样高效。
1052+
1053+ string.substr 提取子串,string.replace 替换,toupper 大写。
1054+
1055+ 可以用` [] ` 索引 string,at() 类似。
1056+
1057+ 可以和 string、c风格字符串、字面量比较。
1058+
1059+ 用 c_str() 和 data() 可以以 c风格字符串 只读访问 string 的内容。
1060+
1061+ string 类型字面量的后缀是 s (` std::literals::string_literals ` )
1062+
1063+ ### 字符串实现
1064+
1065+ 用了 短字符串优化技术 SSO,意思是短字符串会被存在 string 对象内部,长字符串会被存在 自由存储 中。
1066+
1067+ * 不过标准没规定要多少字符就扔自由存储,这要看具体实现。*
1068+
1069+ 为了处理多字符集,标准库给了一个通用的字符串模板 ` basic_string ` , string 实际上是这个模板的实例化 ` using string = basic_string<char>; `
1070+
1071+ ### 字符串视图
1072+
1073+ 字符串视图出现,是为了解决未出现在标准库(即自定义)字符串类型传递子串的问题。string_view 本质上是(指针,长度)对,标明了一个字符串序列。
1074+
1075+ string_view 是只读的。如果想要写版本的,用 span。
1076+
1077+ string_view 要当成指针用,因为可能会造成越界访问。
1078+
1079+ ``` cpp
1080+ string_view bad () {
1081+ string s = "Once upon a time.";
1082+ return {&s[5], 4};
1083+ }
1084+ ```
1085+
1086+ 返回前 s 就已经销毁了。
1087+
1088+ ### 正则表达式
1089+
1090+ ` <regex> `
1091+
1092+ 一个例子是这样:
1093+
1094+ ``` cpp
1095+ regex pat {R"(\w{2}\s* \d{5}(-\d{4})?)"};
1096+ ```
1097+
1098+ `R"()"` 这种就是 **原始字符串字面量 raw string literal**。这种原始字符串字面量不用转义。
1099+
1100+ regex_match 正则和字符串匹配
1101+ regex_search 搜索和正则匹配的字符串
1102+ regex_replace
You can’t perform that action at this time.
0 commit comments