Loading docs/string/index.md +33 −4 Original line number Diff line number Diff line Loading @@ -2,12 +2,41 @@ 字符串可以看作是字符序列。 ## 通常讨论的字符集 ## 字符集 小写字母,大小写字母,字母和数字,数字,char,某范围内的整数,等等…… 字符集是符号和文字组成的集合,在 OI 中,处理字符串时计算复杂度往往要考虑到字符集大小带来的常数影响。 举个栗子,如果一道题只包含 'A' ~ 'Z' 意味着字符集大小是 26 。 如果再加上 '0' ~ '9' 字符集大小就变成了 36 计算复杂度时,字符集大小带来的常数往往要用 $\alpha$ 表示。 ## 如何存字符串 数组(更常用) / 向量(就是 C++ 的 vector) 可以开一个 `char` 数组 , 如 `char a[100]` 也可以用 `vector` 如 `vector<char> v` 同时 STL 中也提供了字符串容器 `std :: string` --- ### 处理字符串需要用到的一些函数 #### 对于 char 数组 - `strcpy(str, src)` : 把 `src` 中的字符复制到 `str` 中, `str` `src` 均为字符数组头指针, 返回值为 `str ` 包含空终止符号 `'\0'` 。 - `strncpy(str, src, cnt) ` :复制至多 `cnt` 个字符到 `str` 中,若 `src` 终止而数量未达 `cnt` 则写入空字符到 `str` 直至写入总共 `cnt` 个字符。 - `strcat(str1, str2)` : 将 `str2` 接到 `str1` 的结尾,用 `*str2` 替换 `str1` 末尾的 `'\0'` 返回 `str1` 。 - `strlen(str)` 返回从 `str[0]` 开始直到 `'\0'` 的字符数。注意,未开启 O2 优化时,该操作写在循环条件中复杂度是 $\Theta(N)$ 的 - `strcmp(str1, str2)` 按照字典序比较 `str1 str2` 若 `str1` 字典序小返回负值, 一样返回 0 ,大返回正值 请注意,不要简单的认为只有 `0, 1, -1` 三种,在不同平台下的返回值都遵循正负,但并非都是 `0, 1, -1` #### 对于 `std :: string` - 赋值运算符 `=` 右侧可以是 `const string / string / const char*/ char* ` - 访问运算符 `[cur]` 返回 `cur` 位置的引用 - 访问函数 `data()` 返回一个 `char` 数组的头指针,内容与该 `string ` 相同 - 访问函数 `c_str()` 返回一个不可修改的 `char` 数组。 - 容量函数 `size()` 返回字符串字符个数 其实, C / C++ 的字符串常量也是用数组存的。 - 还有一些其他的函数如 `find()` 找到并返回某字符位置。 - `std :: string` 重载了比较逻辑运算符,复杂度是 $\Theta(N)$ 的 Loading
docs/string/index.md +33 −4 Original line number Diff line number Diff line Loading @@ -2,12 +2,41 @@ 字符串可以看作是字符序列。 ## 通常讨论的字符集 ## 字符集 小写字母,大小写字母,字母和数字,数字,char,某范围内的整数,等等…… 字符集是符号和文字组成的集合,在 OI 中,处理字符串时计算复杂度往往要考虑到字符集大小带来的常数影响。 举个栗子,如果一道题只包含 'A' ~ 'Z' 意味着字符集大小是 26 。 如果再加上 '0' ~ '9' 字符集大小就变成了 36 计算复杂度时,字符集大小带来的常数往往要用 $\alpha$ 表示。 ## 如何存字符串 数组(更常用) / 向量(就是 C++ 的 vector) 可以开一个 `char` 数组 , 如 `char a[100]` 也可以用 `vector` 如 `vector<char> v` 同时 STL 中也提供了字符串容器 `std :: string` --- ### 处理字符串需要用到的一些函数 #### 对于 char 数组 - `strcpy(str, src)` : 把 `src` 中的字符复制到 `str` 中, `str` `src` 均为字符数组头指针, 返回值为 `str ` 包含空终止符号 `'\0'` 。 - `strncpy(str, src, cnt) ` :复制至多 `cnt` 个字符到 `str` 中,若 `src` 终止而数量未达 `cnt` 则写入空字符到 `str` 直至写入总共 `cnt` 个字符。 - `strcat(str1, str2)` : 将 `str2` 接到 `str1` 的结尾,用 `*str2` 替换 `str1` 末尾的 `'\0'` 返回 `str1` 。 - `strlen(str)` 返回从 `str[0]` 开始直到 `'\0'` 的字符数。注意,未开启 O2 优化时,该操作写在循环条件中复杂度是 $\Theta(N)$ 的 - `strcmp(str1, str2)` 按照字典序比较 `str1 str2` 若 `str1` 字典序小返回负值, 一样返回 0 ,大返回正值 请注意,不要简单的认为只有 `0, 1, -1` 三种,在不同平台下的返回值都遵循正负,但并非都是 `0, 1, -1` #### 对于 `std :: string` - 赋值运算符 `=` 右侧可以是 `const string / string / const char*/ char* ` - 访问运算符 `[cur]` 返回 `cur` 位置的引用 - 访问函数 `data()` 返回一个 `char` 数组的头指针,内容与该 `string ` 相同 - 访问函数 `c_str()` 返回一个不可修改的 `char` 数组。 - 容量函数 `size()` 返回字符串字符个数 其实, C / C++ 的字符串常量也是用数组存的。 - 还有一些其他的函数如 `find()` 找到并返回某字符位置。 - `std :: string` 重载了比较逻辑运算符,复杂度是 $\Theta(N)$ 的