Skip to content

字符串是什么

本节先建立字符串的基本概念。

学习完成后,你需要理解:字符串可以看作由字符组成的线性序列。它和线性表一样具有顺序关系,但字符串通常专门用于表达文本、符号序列或编码后的信息。


字符串最直观的理解是“一串字符”。

例如:

hello
data structure
A1B2C3

这些内容都可以看作字符串。字符串中的每个字符都有位置,字符之间存在明确的先后顺序。

hello 为例:

下标: 0 1 2 3 4
字符: h e l l o

这和线性表非常相似:第一个字符是 h,第二个字符是 e,最后一个字符是 o。中间字符既有前驱,也有后继。


字符串可以看作一种特殊线性表,它的元素类型是字符。

普通线性表可以保存整数、对象、节点或其他数据,而字符串主要保存字符序列。正因为元素是字符,字符串有很多专门操作,例如:

  • 比较两个字符串是否相同。
  • 判断一个字符串是否包含另一个字符串。
  • 提取子串。
  • 拼接字符串。
  • 按字符统计频率。
  • 查找某个模式串出现的位置。

这些操作让字符串问题成为数据结构学习中非常重要的一类问题。


字符串和普通集合不同,字符顺序非常重要。

例如:

abc
bca
cab

这三个字符串包含相同的字符,但顺序不同,因此含义也不同。

在字符串问题中,顺序往往决定结果。查找子串时要匹配连续顺序,判断回文时要比较前后位置,排序字符串时要按照字符顺序比较。

因此,学习字符串时一定要把它看成有序序列,而不是简单字符集合。


字符串可以没有任何字符,这种字符串叫空字符串。

""

空字符串长度为 0。它在程序中很常见,例如用户没有输入内容、某次截取结果为空、搜索结果不存在等。

处理字符串问题时,空字符串是一个重要边界情况。如果没有考虑它,代码可能出现越界、错误判断或异常。


很多语言内部会把字符串看成字符数组或类似字符数组的结构。也就是说,字符串中的字符通常可以通过位置访问。

但是,字符串和普通数组不完全相同。某些语言中的字符串是不可变的,修改字符串时不会直接改变原对象,而是生成新字符串。后续小节会专门讨论这个问题。


字符串是由字符组成的线性序列,可以看作元素类型为字符的特殊线性表。

字符串问题的核心不只是保存文本,还包括顺序、长度、子串、匹配、统计和比较等操作。后续学习时,要同时关注字符串的线性结构特点和文本处理特点。