字符数组和字符串之间的区别
内容
C ++都支持 字符数组和字符串,因为C ++在同时使用它们时具有很大的好处。但是,无法对字符数组进行操作提高了类字符串的发展。字符数组和字符串都包含字符序列。但是,字符数组和字符串之间的根本区别是不能使用标准运算符来操作“字符数组”,而可以使用标准运算符来操作“字符串”对象。让我们研究一下字符数组和字符串之间的其他区别。
- 比较表
- 定义
- 关键差异
- 结论
比较表
比较基础 | 字符数组 | 串 |
---|---|---|
基本的 | 字符数组是字符数据类型的变量的集合。 | 字符串是类,字符串的变量是类“字符串”的对象。 |
句法 | char array_name; | 字符串string_name; |
索引编制 | 字符数组中的单个字符可以通过其在数组中的索引进行访问。 | 在字符串中,可以通过函数“ string_name.charAt(index)”访问特定字符。 |
数据类型 | 字符数组未定义数据类型。 | 字符串定义了C ++中的数据类型。 |
经营者 | C ++中的运算符不能应用于字符数组。 | 您可以在字符串上应用标准的C ++运算符。 |
边界 | 数组边界很容易溢出。 | 边界不会溢出。 |
访问 | 快速访问。 | 存取缓慢。 |
字符数组的定义
字符数组是“ char”数据类型的变量的集合;它可以是一维数组或二维数组。也称为“空终止字符串”。字符数组是存储在连续内存地址中的字符序列。在字符数组中,可以通过其索引访问特定字符。 “空字符”终止字符数组。
让我们以字符数组为例:
char name = {A,j,a,y, 0};或char name =“ Ajay”;
此处,“ char”是字符数据类型,“ name”是字符数组的变量名。我展示了两种初始化字符数组的方法。在第一种方法中,明确提到了null;在第二种方法中,编译器自动插入了null。
字符串的末尾始终是一个空字符。它是字符数组的终止字符。字符数组不是内置数据类型。我们通过声明来创建字符数组。您不能在字符数组上应用标准运算符。要对字符数组进行操作,有一些内置函数,例如(strlen(),strlwr(),strupr(),strcat())。由于标准运算符不能应用于字符数组,因此它们不能参与任何表达式。
也可以创建指向字符数组的字符指针。
让我们通过一个例子来理解它。
char s1 =“ Hello”; char s2 =“先生”; s1 = s1 + s2; //错误运算符不能应用s2 = s1; //错误字符指针char * s =“ Morning”;字符* p; p = s; //执行
在上面的示例中,我们声明了两个字符数组s1,s2和两个字符指针s和p。字符数组s1和s2已初始化,我们可以看到加法运算符(+)和赋值运算符都不适用于字符数组。但是可以将一个字符指针分配给另一个字符指针。
请记住,一旦字符数组被初始化,就不能再次初始化为另一组字符。与C ++中的字符串相比,对字符数组或以null结尾的字符串的访问速度更快。
字符串的定义
字符串不是C ++的内置数据类型。它是“字符串”类型的类对象。就像在C ++中一样,创建类就像创建“类型”一样。类“字符串”是C ++库的一部分。它整体上包含一组字符或字符数组。开发标准字符串类的背后有三个原因。
- 第一 是“一致性”,则字符数组本身并不是数据类型。
- 第二 是“方便”,您不能在字符数组上使用标准运算符。
- 第三 如果是“安全”,则数组边界很容易超出。
让我们通过一个例子来理解字符串。
字符串s1; s1 =“ Hello”;字符串s2(“早安”);字符串s3 =“ Hennery”;字符串s4;
在上面的声明中,声明了四个字符串变量或对象(s1,s2,s3,s4)。在上面的声明中,我展示了初始化字符串的三种方法。声明字符串s1,然后分别初始化。字符串s2由“ String”类的构造函数初始化。字符串s3在声明为普通数据类型do时被初始化。我们可以将标准运算符应用于字符串变量。
s4 = s1; //将一个字符串对象分配给其他s4 = s1 + s2; //添加两个字符串并将结果存储在第三个字符串if(s3> s2)//比较两个字符串s5(s1);使用现有的字符串对象创建一个新的字符串对象
在上面的代码中,将各种运算符应用于字符串,并执行各种操作。第一条语句将一个字符串对象复制到另一个字符串对象。在第二个语句中,将两个字符串连接起来并存储在第三个字符串中。在第三条语句中,比较了两个字符串。在第四条语句中,使用已经存在的字符串对象创建一个新的字符串对象。
与字符数组或以null终止的字符串相比,访问字符串的速度较慢。
字符数组和字符串之间的主要区别
- 字符数组是字符数据类型的变量的集合。 String是实例化为声明字符串的类。
- 使用索引值可以访问字符数组中的字符。另一方面,如果要访问字符串中的特定字符,则可以通过函数字符串的s_name.charAt(index)进行访问。
- 由于数组同样不是数据类型,因此字符也不是数据类型。另一方面,作为类的String充当引用类型,因此可以说String是数据类型。
- 您不能在字符数组上应用任何运算符,而可以在String上应用运算符。
- 作为数组,字符数组具有固定的长度,其边界很容易越界。其中String没有任何边界。
- 数组元素存储在连续的内存位置中,因此比字符串变量访问速度更快。
结论:
无法对字符数组进行操作提高了标准字符串类的发展。