Paradigms 字符数组和字符串之间有什么区别?

Paradigms 字符数组和字符串之间有什么区别?,paradigms,Paradigms,把时间花在高级语言上,我突然意识到我不知道字符数组和字符串之间的区别。我认为它们是一样的,但不确定。有区别吗?它只是一个具有某种抽象的字符数组吗?字符数组只是一个字符数组 字符串是使用字符数组的数据结构 有些字符串表示法使用空终止符(如C),另一些字符串表示法使用长度前缀。在C中,这些表示法几乎相同,但字符串的结尾将有一个额外的空字符 在其他语言(Java、C#等)中,字符串是对象,而字符数组是。。。字符(是基本数据类型) 通常,字符串是用字符数组实现的。字符串是一个抽象,但是一个字符序列。它没

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

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

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


有些字符串表示法使用空终止符(如C),另一些字符串表示法使用长度前缀。在C中,这些表示法几乎相同,但字符串的结尾将有一个额外的空字符

在其他语言(Java、C#等)中,字符串是对象,而字符数组是。。。字符(是基本数据类型)

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

字符串是一个抽象,但是一个字符序列。它没有提到执行。如果您想创建一个基于字符链表的字符串实现,没有什么可以阻止您

在像C这样的语言中,差别很小——只是C字符串是顺序地址上以null结尾的字符序列,通常通过指针访问


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

String
是java中的
类。因此它有一些属性,例如
长度
。因此,当您询问字符串的大小时,它只返回该值,而不是每次计算值。也可以使用其他方法,例如
索引
子字符串
,使生活变得简单,这样你就不必自己去做了。

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


抽象地说,我认为最大的区别在于你想如何与他们合作。您是想处理一段文本,比如向最终用户显示一条消息,还是想查看一系列字符,对列表进行处理?在某种程度上,这是相当主观的。

C样式的字符串在内部由字符数组表示,末尾带有“\0”,表示字符串的结尾


<>在C++中,String .h中定义了一个字符串容器类,它提供了一些典型的字符串操作来操作字符串。p> 我以前教编程,我就是这样解释这个问题的

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

现在关注这两件事各自以不同的方式为这一共同点增加了什么

字符数组添加任何已知数组都可以添加的内容:索引和对单个项目的随机访问

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

这种方法(看看共同点,然后看看事物如何偏离它们)在各种情况下都被证明是有用的


希望这有帮助。

这取决于语言。在C-ish语言中,它们几乎是一致的。您可以声称区别在于“strings”有一个隐式终止nul,但那将是分裂头发


Fortran是另一个极端。在C语言中,字符串是以空字符“\0”结尾的字符数组。

在C语言中,字符串是以空字符(\0)结尾的字符数组,但

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


也可以使用C++中的字符串对象。

Langth-()是一种方法而不是属性。@ DeReMon + 1提到它是一种方法,但在内部它只返回一个属性。我认为“数据结构”是误导性的。经典的C字符串在内存中一个接一个地放置字符,最后一个字节包含二进制零。除了最后一个字节,与数组完全相同。这是一个以C为中心的答案。有些语言的字符串和数组是完全不同的。@jay:这不是一种结构吗?当结构的一部分被移除时,会发生不好的事情吗?在大多数语言中,字符串是一种结构,即使它只是一个字符数组,或者是一个终止符,或者是其他指定长度的机制。字符串是一种抽象,而不是数据结构。它是以数据结构(如数组或列表)的形式实现的,但这是语言与语言不同的一个细节,而抽象(表示文本块的数据类型)在任何地方都基本相同。我不得不说,我更喜欢Draemon强调字符串作为抽象。这些年来使用了很多很多不同的实现。Haskell是一种基于字符链表的本机字符串实现的语言示例。我对这个答案的主要问题是,有些语言不是这样的。例如,在Fortran语言中,“string”是一个适当的字符