[知识点] 1.4.2 字符数组与 string

总目录 > 1  语言基础 > 1.4.2  字符数组与 string

前言

作为 C++ 的特性,OI 的几年里基本没有用过 string(字符串),因为觉得 char 数组(字符数组)实在很方便。。这里单独开一篇以进一步了解下字符数组与字符串的各种联系、差异与优劣。

子目录列表

1、字符数组

2、string 类

1.4.2  字符数组与 string

1、字符数组

① 概念

在 1.2  C++ 基础知识 中已经先后介绍了各种数据类型以及数组。那么在其中,比较特殊的一类数组就是 char 类型的数组。对于其他数据类型的数组,尽管它们被归类于一组,但其实元素之间依旧只存在一个逻辑地址上的关系,只是一串相邻的值;而 char 类型因为存储的是字符,如果将各个字符相连,正如将各个字母相连一样能够组成单词,就组成了一串字符,简称字符串

我们用单引号来表示字符,而双引号表示字符串,如下两种对字符数组的定义均是合法的:

char a[10] = {'h', 'e', 'l', 'l', 'o'};
char b[10] = "hello";

(但它们并不等价,字符串整体赋值时会自动在字符串末尾加上 '' 字符,该字符为结束符,表示一个字符串的结束;也就是说,b 的实际内容为 "hello/0",而 a 为 "hello")

在 C 语言中,只能通过 char 数组来实现字符串。这样的字符串,称之为 C 风格字符串

② 相关函数

> strlen(s) 返回字符串 s 的长度

> strcpy(s1, s2) 将字符串 s2 赋值给 s1

> strcat(s1, s2) 将字符串 s2 连接到 s1 末尾

> strcmp(s1, s2) 判断字符串 s1 和 s2 的字典序

关于字符串的字典序,请参见 施工中

还有 strchr, strstr... 其实除了第一条查询字符串长度函数外,其他函数都能比较轻松的手动实现,使用的也不多,了解即可。

2、string 类

stringC++ 标准库 <string> 中提供的一个,本质上是 std :: basic_string<char> 的简称,其作用就是实现字符串的功能。不同于 int, double, char 等,它们属于标准数据类型,C / C++ 通用,而 string 只是 C++ 标准库中的一个类,和其他 C++ 中的 STL 容器属于一种类型。

因为字符数组的特殊性,C++ 直接原生提供字符串 string,某种程度上解决了很多不便。相比 char 数组,string 的优势在于:

① 动态分配空间

② 可以重载运算符

③ 可以整体赋值

string 的实际操作更为便捷,由于可以直接赋值,所以不需要复制函数;连接字符串可以直接相加,比如 s = s1 + s2;求字符串 s 长度可以使用 s.size()

原文地址:https://www.cnblogs.com/jinkun113/p/13325451.html