编程中的字符串是什么2025年6月13日 | 阅读9分钟 字符串通常是一系列计算机科学指令,可以是字面常量或某个变量。后者可能能够演变其组件并调整长度,或者在创建后可以固定。字符串通常被认为是一种信息形式。它通常被表示为字节(或术语)范围信息结构,使用某种字符编码来保留一系列组件,通常是字母。该序列也可以被指定为更通用的数组或其他序列(或数组)信息的结构和排列。 变量被定义为一个序列,该序列可能导致立即为固定最大大小永久分配空间,或者实现活动动态分配以包含动态数量的元素,具体取决于编程语言和使用的正确信息类型。 当序列在代码中明确出现时,它被归类为特定字符串或不可见字符串。字符串是在数学逻辑和概念计算机科学中使用的数学表达式中,从称为字母的结构中选择的有限符号序列。 字符串数据类型数据类型字符串是一种基于结构化序列概念建模的数据类型。字符串是一种如此有效和必要的数据形式,以至于它们几乎在每种计算机编程语言中都得到引入。它们在某些语言中可作为基本数据类型,在其他语言中可作为合成变体。许多高级编程语言的结构使得字符串数据类型的实例可以被字符串解释,通常以某种方式引用;这种元字符串称为符号串或字符串字面量。 字符串长度虽然结构化字符串可能具有绝对固定的长度,但它们通常会限制某些语言中字符串的大小到一个假定的最大值。此外,有两种字符串数据类型:指定长度的字符串,在编译时有一个定义的固定最大大小,并且使用相似数量的存储空间,无论是否需要这个最大值;以及可变大小的字符串,它们没有任意的有限大小,并且根据确切的参数,在运行时可能使用不同数量的存储。可变长度字符串是其他编程语言中序列的主体。虽然可变长度字符串的大小也受可用内存存储量的限制。字符串的长度可以作为不同的整数处理(这会给大小带来另一个任意障碍),或者隐含地作为一个终止符,通常是一个具有所有零位的字符质量,就像在 C 语言中一样。 字符编码传统上,字符串数据类型每字符分配一个字节。然而,虽然实际字符集因地区而异,但字符实现足够相似,以至于开发人员可以忽略这一点,因为程序中专门准备的字符(如时间帧、存储和逗号)在项目会遇到的所有 Unicode 字符中都处于相似的位置。传统上,这些字符序列基于 ASCII 或 EBCDIC。当在使用不同加密的一种处理的框架上显示消息时,消息经常会失真,尽管有些可读。一些互联网用户学会了阅读这些失真的文本。 Unicode 具有一种压缩图像。许多其他 编程语言 现在都有 Unicode 字符串数据类型。Unicode UTF-8 选择的字节源模型旨在避免早期多字节 Unicode 字符遇到的问题。UTF-8、UTF-16 和 UTF-32 使开发人员能够认识到预定义长度的应用程序分割与“字符”是不同的;然而,主要问题在于构建不佳的 API 来掩盖这种区别。 实施一些语言,例如 Ruby 和 C++,允许在字符串创建后更新其组件;这些称为可变字符串。在其他语言(如 Java 和 Python)中,值是固定的,如果需要进行任何更改,则必须创建新字符串。这些称为永久序列(其中一些语言还提供了其他可变类型,例如 Java 和 .NET StringBuilder,线程安全的 Java String Buffer,以及 Cocoa NS Mutable String)。通常,字符串被配置为字节、字符或代码项的序列,以便于访问,排除具有有限大小的字符,以便分离组或子字符串。或者,像 Haskell 这样的少数语言将它们合并为关系数据库。 字符串的表示字符串的表示高度依赖于文本目录和传统加密系统的可用性。字符串的早期实现旨在与 ASCII 定义的目录和加密一起工作,或者更现代的增强功能,如 ISO(国际标准化组织)8859 序列。Unicode 的大量支持,以及一系列重要的嵌入,如 UTF-8 和 UTF-16,经常被高级功能使用。 字节字符串一词倾向于指示用于特定目的的字节序列,而不是仅(可读)文本的字符串、段落字符串或类似的东西。字节字符串也表示字节可以接受任何输入,因此可以保留任何信息,这意味着任何值都不能被视为终止值。 一些字符串实现了一些可变长度序列的实现,其输入存储相应字符串的文本代码。主要区别在于,单个有意义的文本可能在某些加密的数组中占据一个以上的条目。 例如,UTF-8 就是如此,因为单个代码(UCS 代码助手)可以占用一到四个字节的任意长度。可以为唯一字符使用无限数量的值。在这种情况下,字符串序列(位数)与行的实际大小不同(当使用字节数时)。UTF-32 避免了第一个问题。 ![]() 字符串可以用以下形式表示。它们是:
在软件和硬件中,使用唯一的非零字节来终止字符串在历史上一直存在,尽管通常使用也作为发布字符的值。“一些嵌入式系统使用 $ 符号:使用 CDC(Control Data Corporation)系统(意味着字符的值为零)以及 ZX80 的使用,因为这是机器 BASIC 语言中的序列子串。”“数据处理”设备,如 IBM 1401,使用新的缩写符号位在左侧分隔字符串,处理将从右侧开始,非常相似。在序列的大部分其他部分,此位将需要明确。虽然 IBM 1401 有一个 7 位代码,但没有人想到使用它作为规避第七位标识(例如)管理 ASCII 代码的功能。 最初,微型计算机软件指出 ASCII 代码不使用高位字节,并将其配置为表示序列的终止。在输出之前,必须将其恢复为 0 值。
使用唯一的终止字,可以通过隐含方式编码序列的长度;这始终是零值字符(意味着所有位都包含零值),这是著名的 C 编程语言使用并延续的标准。这种表述通常也被称为 C 字符串。n 个字符的字符串组成消耗 n + 1 个存储(1 个用于终止符),因此似乎是一个隐含的数据结构。 在终止字符串和任何字符串中,终止字符都不是可接受的单词。长度字段字符串没有此限制,并且可以包含特定的二进制信息。 例如 这里,我们有一个例子,其中一个以空值终止的序列以 8 位十六进制数字的形式保存在一个 10 字节的帧中,连同它的 ASCII(甚至更标准的 UTF-8)表达式,是 ![]() 上图中的字符串大小“DAVID”是五个单词,但它占用了 6 个字节。在终止符之后,字符似乎不是解释的组成部分;它们可以是任何其他数据的组成部分,或者仅仅是垃圾。(这类字符串在声明后通常称为 ASCIZ 序列,由声明存在的编程语言声明)。
许多编程语言通过记录引入字符串,通过一些结构属性,如面向对象的模型,以及以下代码 虽然实现通常是隐藏的,但通过成员变量来操作和更改序列至关重要。输入文本指的是动态分配的系统内存,可以根据需要进行扩展。
也可以直接保存字符串的大小,例如,仅通过将大小作为字节值附加到字符串。在几种 Pascal 变体中,使用了这种模式;因此,许多人将这种序列称为 Pascal 字符串或 P 字符串。将字符串大小保存为字节会将字符串的最大长度限制为 255。Pascal 字符串的增强表示使用 16 位、32 位或 64 位术语来保存字符串大小,以防止某些限制。当长度字段达到物理地址时,只有可用存储会限制字符串。 如果大小受限,则可以将其加密在稳态存储中。通常,计算机术语,产生一个隐含的数据结构,使用 n+k 存储,这里 k 是文本中的字符数(在 64 位系统上为 8 个 8 位 ASCII,在 32 位系统上的 32 位 UTF-32/UCS-4 为 1 个,等等)。如果大小不受限制,加密大小 n 需要 log(n) 内存,因此长度前缀序列是一种简洁的数据结构,以 log(n) + n 内存加密大小为 n 的字符串。 在上述情况中,仅大小前缀字段没有固定大小,但随着序列的发展,单个字符串值必须被移动,以便需要扩展序列号。 下面是一个 Pascal 字符串,包含其 ASCII / UTF-8 表达式,放在一个 10 字节的缓冲区中 ![]()
文本删除或长度代码限制序列:C 语言的字符数组包含空值。例如,它们不能被 C 字符串库的操作显式处理:具有大小值的字符串受限于最大代码值。 通过创造性的编程,可以解决上述两种缺点。 在这里,我们看到几种语言中字符串的一些不同表示形式—— C 语言中的字符串表示众所周知,C 编程不允许字符类型参数存储超过一个字符。在 C 编程中,以下示例因此是错误的,并产生语法错误。 正如我们之前所见,数组的想法是在一个变量中存储一个特定数据类型的值,而不是单个值。这里我们有存储和打印整数类型序列中五个数字的语法结构。 在上述代码语法成功执行后,我们得到了如下输出。 ![]() Java 编程中的字符串表示虽然您可以使用字符序列来存储字符串,但 Java 是一种专业的编程语言,其开发人员试图包含高级功能。作为预定义的数据类型,Java 像其他所有数据类型一样提供字符串。这意味着您可以显式描述字符串,而不是将其描述为文本序列。 例如 - 这里我们有一个 Java 程序来打印“Hello Java”。在下面讨论的程序代码中,Java 使用 **new 操作符** 来创建一个唯一的字符串序列。 在上述程序代码成功执行后,您将在屏幕上看到以下输出。 ![]() Python 语言中的字符串表示在 Python 编程中生成和表示字符串非常方便,就像使用单引号或双引号来分配 Python 变量序列一样。 例如: 这里我们有一个基本的 Python 程序,通过 print() 函数创建和打印两个字符串序列。 执行上述代码后,您将获得以下输出。 ![]() Python 语言不支持字符类型;它们被视为大小为一的序列,通常称为子字符串——使用方括号和索引列表来组合子字符串以获取子字符串。 看看下面的程序代码部分。 程序代码 成功执行上述代码后,您将获得以下结果。 ![]() |
我们请求您订阅我们的新闻通讯以获取最新更新。