17

把时间花在高级语言上,我突然意识到我不知道字符数组和字符串之间的区别。我认为它们是同一件事,但不确定。有区别吗?它只是一个带有一些抽象的字符数组吗?

4

10 回答 10

21

String一个抽象,但是是一个字符序列。它没有提到实施。如果你想创建一个基于字符链接列表的 String 实现,那么没有什么能阻止你。

在诸如 C 之类的语言中,几乎没有什么区别——只是 ac 字符串是在连续地址处以空字符结尾的一系列字符,通常通过指针访问。

在 OOP 语言中,String 将是某个 String 类的对象。这可能会在内部将数据保存在字符数组中,但您不需要知道这一点。字符数组只能是简单数组,但如果实现者决定,String 类可以对字符串提供许多操作(子字符串、正则表达式等)。

于 2010-02-17T19:55:24.483 回答
15

字符数组只是一个字符数组

字符串是使用字符数组的数据结构

一些字符串表示使用空终止符(如 C),其他使用长度前缀

于 2010-02-17T19:52:11.160 回答
9

我曾经教过编程,这就是我用来解释这个特定问题的方式。

首先,关注两者的共同点:char 数组和字符串都由一系列字符组成。例如,作为一个序列意味着字符是有序的并且可以枚举它们。

现在关注这两件事中的每一个,以它们特定的不同方式,为这个共同点添加了什么。

一个char 数组添加了任何数组已知添加的内容:索引和随机访问单个项目。

另一方面,字符串增加了这样一个事实,即字符序列被视为具有自己属性的整体。在某些实现中,实现这一点意味着改变字符的存储方式(例如,在 C 字符串中添加终止 null)。

这种方法(查看共性,然后查看事物与它们的差异)已被证明在各种情况下都很有用。

希望这可以帮助。

于 2010-02-17T20:14:42.080 回答
4

在 C 中,这些几乎相同,尽管字符串末尾会有一个额外的空字符。

在其他语言(Java、C# 等)中,字符串是对象,而字符数组是 ... 字符数组(它们是原始数据类型)。

通常,字符串是用字符数组实现的。

于 2010-02-17T19:53:19.677 回答
3

答案在某种程度上取决于您谈论的语言。在 .Net/C# 世界中,字符串是不可变对象,而 char 数组可以轻松地在数组中添加/更改值。字符串可以以只读方式被视为 char 数组,因为您可以迭代字符串中的字符。

在摘要中,我认为最大的区别在于您希望如何使用它们。您是要处理一大段文本,比如向最终用户显示消息,还是要查看一系列字符,对列表进行一些处理?这在一定程度上都是相当主观的。

于 2010-02-17T20:00:24.827 回答
1

这取决于语言。在 C-ish 语言中,它们几乎是同义词。您可以声称不同之处在于“字符串”具有隐式终止 nul,但这会让人毛骨悚然。

Fortran 是另一个极端。字符数组和字符串是完全不同的类型,它们可以使用不同的操作。

于 2010-02-17T20:14:49.540 回答
0

Stringclass在java中是一个。所以它具有属性,例如length. 因此,当您询问字符串的大小时,它只会返回该大小,而不是每次都计算该值。它还有其他方法,例如indexOfsubstring等,使生活变得轻松,因此您不必自己这样做。

于 2010-02-17T19:57:02.907 回答
0

C 风格的字符串在内部由字符数组表示,末尾有 '\0',表示字符串的结尾。

在 C++ 中,在 string.h 中定义了一个字符串容器类,它提供了一些典型的字符串操作来操作字符串。

于 2010-02-17T20:13:58.200 回答
0

字符串是以空字符 '\0' 结束的字符数组</p>

于 2013-10-11T16:26:01.037 回答
0

在 C 中,字符串是由空字符 (\0) 终止的字符数组,但

在 C++ 中,字符串是一个类,我们使用它的对象,末尾没有空字符,但字符数组末尾包含空字符。

Also, we can use operators with the string object in C++.

于 2018-08-21T10:15:17.380 回答