把时间花在高级语言上,我突然意识到我不知道字符数组和字符串之间的区别。我认为它们是同一件事,但不确定。有区别吗?它只是一个带有一些抽象的字符数组吗?
10 回答
String是一个抽象,但是是一个字符序列。它没有提到实施。如果你想创建一个基于字符链接列表的 String 实现,那么没有什么能阻止你。
在诸如 C 之类的语言中,几乎没有什么区别——只是 ac 字符串是在连续地址处以空字符结尾的一系列字符,通常通过指针访问。
在 OOP 语言中,String 将是某个 String 类的对象。这可能会在内部将数据保存在字符数组中,但您不需要知道这一点。字符数组只能是简单数组,但如果实现者决定,String 类可以对字符串提供许多操作(子字符串、正则表达式等)。
字符数组只是一个字符数组
字符串是使用字符数组的数据结构
一些字符串表示使用空终止符(如 C),其他使用长度前缀
我曾经教过编程,这就是我用来解释这个特定问题的方式。
首先,关注两者的共同点:char 数组和字符串都由一系列字符组成。例如,作为一个序列意味着字符是有序的并且可以枚举它们。
现在关注这两件事中的每一个,以它们特定的不同方式,为这个共同点添加了什么。
一个char 数组添加了任何数组已知添加的内容:索引和随机访问单个项目。
另一方面,字符串增加了这样一个事实,即字符序列被视为具有自己属性的整体。在某些实现中,实现这一点意味着改变字符的存储方式(例如,在 C 字符串中添加终止 null)。
这种方法(查看共性,然后查看事物与它们的差异)已被证明在各种情况下都很有用。
希望这可以帮助。
在 C 中,这些几乎相同,尽管字符串末尾会有一个额外的空字符。
在其他语言(Java、C# 等)中,字符串是对象,而字符数组是 ... 字符数组(它们是原始数据类型)。
通常,字符串是用字符数组实现的。
答案在某种程度上取决于您谈论的语言。在 .Net/C# 世界中,字符串是不可变对象,而 char 数组可以轻松地在数组中添加/更改值。字符串可以以只读方式被视为 char 数组,因为您可以迭代字符串中的字符。
在摘要中,我认为最大的区别在于您希望如何使用它们。您是要处理一大段文本,比如向最终用户显示消息,还是要查看一系列字符,对列表进行一些处理?这在一定程度上都是相当主观的。
这取决于语言。在 C-ish 语言中,它们几乎是同义词。您可以声称不同之处在于“字符串”具有隐式终止 nul,但这会让人毛骨悚然。
Fortran 是另一个极端。字符数组和字符串是完全不同的类型,它们可以使用不同的操作。
String
class
在java中是一个。所以它具有属性,例如length
. 因此,当您询问字符串的大小时,它只会返回该大小,而不是每次都计算该值。它还有其他方法,例如indexOf
,substring
等,使生活变得轻松,因此您不必自己这样做。
C 风格的字符串在内部由字符数组表示,末尾有 '\0',表示字符串的结尾。
在 C++ 中,在 string.h 中定义了一个字符串容器类,它提供了一些典型的字符串操作来操作字符串。
字符串是以空字符 '\0' 结束的字符数组</p>
在 C 中,字符串是由空字符 (\0) 终止的字符数组,但
在 C++ 中,字符串是一个类,我们使用它的对象,末尾没有空字符,但字符数组末尾包含空字符。
Also, we can use operators with the string object in C++.