Char数组和字符串有什么区别?

时间:2010-02-17 19:49:54

标签: paradigms

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

10 个答案:

答案 0 :(得分:19)

String 的抽象,但是序列的字符。它没有说明实施。如果你想根据链接的字符列表创建一个String实现,那就没有什么能阻止你。

在诸如C之类的语言中,差异很小 - 只是c字符串是连续地址处以空字符结尾的字符序列,通常通过指针访问。

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

答案 1 :(得分:11)

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

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

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

答案 2 :(得分:7)

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

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

现在关注这两件事中的每件事,以他们特定的不同的方式添加到这个共同点。

char数组会添加已知要添加的数组:索引和随机访问各个项目。

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

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

希望这有帮助。

答案 3 :(得分:4)

在C中,这几乎是相同的,尽管字符串最后会有一个额外的空字符。

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

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

答案 4 :(得分:2)

答案在某种程度上取决于你所说的语言。在.Net / C#中,世界字符串是不可变对象,而char数组可以在数组中轻松添加/更改值。字符串可以以只读方式处理为char数组,因为您可以遍历字符串中的字符。

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

答案 5 :(得分:0)

String是java中的class。所以它具有例如length。因此,当您询问字符串的大小时,它只返回而不是每次都计算该值。它还有其他方法,例如indexOfsubstring等让生活变得轻松,所以你不必自己动手。

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

这取决于语言。在C-ish语言中,它们几乎是同义词。你可以声称差异是“字符串”有一个隐含的终止nul,但那将是分裂的头发。

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

答案 8 :(得分:0)

字符串是以空字符'\ 0'

结尾的字符数组

答案 9 :(得分:0)

在C中,字符串是一个由空字符(\ 0)终止但

终止的字符数组

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

此外,我们可以在C ++中将运算符与字符串对象一起使用。

相关问题