串的定义
早先的计算机在被发明时,主要作用是做一些科学和工程的计算工作,也就是现在我们所理解的计算器,只不过它比小小计算器功能更强大、速度更快一些。后来发现,在计算机上做非数值处理的工作越来越多,使得我们不得不需要引入对字符的处理。于是就有了字符串的概念。
比如我们现在常用的搜索引擎,当我们在文本框中输入“数据”时,它已经把我们想要的“数据结构”列在下面了。显然这里网站做了一个字符串查找匹配的工作。如下图:
今天我们就是研究“串”这样的数据结构。先来看定义。
串:串(string)是由0个或多个字符组成的有限序列,又名叫字符串。
一般记为 s=“a1a2a3…an”(n>=0),其中,s是串的名称,用双引号(有些书也用单引号)括起来的字符序列是串的值,主要单引号不属于串的内容。ai (1 <= i <= n) 可以是字母、数字或其他字符,i就是该字符在串中的位置。串中的字符数据n称为串的长度,定义中谈到“有限”是指长度n是一个有限的数值。零个字符的串称为空串(null string),它的长度为零,可以直接使用双引号“”表示,也可以用希腊字母 xx 来表示。所谓的序列,说明串的相邻字符之间具有前驱和后继的关系。
还有一些概念需要解释。
空格串,是只包含空格的串。注意它和空串的区别,空格串是有内容有长度的,而且可以不止一个空格。
子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,相应的,包含子串的串称为主串。
子串在主串中的位置就是子串的第一个字符在主串中的序号。
开头我所提到的“over”、“end"、”lie"、其实都可以认为是"lover"、“friend”、“believe” 这些单词字符串的字串。
串的比较
两个数字,很容易比较大小。2比1大,这完全正确,可是两个字符串如何比较大小?比如 “silly”,“stupid”这样的同样表达“愚蠢的”的单词字符串,它们在计算机中的大小其实取决于他们挨个字母的前后顺序。它们的第一个字母都是“s",我们认为不存在大小差异,而第二个字母,由于’i’比’t‘字母要靠前,所以’i’ < ‘t’,于是我们说 “silly” < “stupid”。
事实上,串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号。