定义:串是由零个或多个字符组成的有限序列,又叫做 字符串

一般记为 S = "\(a_1a_2......a_n\)"(n ≥ 0)

  • S : 串的名称
  • \(a_1a_2......a_n\):串的值

概念解释:

  • 空格串:只包含空格的串,空格串不是空串,其有内容有长度,可不止一个空格
  • 子串与主串:串中任意个数的连续字符组成的子序列称之为该串的子串,包含子串的串称之为主串
  • 子串位置:子串第一个字符在主串中的位置

串的比较

定义:

给定两个串:s= "\(a_1a_2......a_n\)", t = "\(b_1b_2......b_n\)",当满足以下条件之时,s < t:

  • n < m,且 \(a_i = b_i\) ( i = 1,2,...,n)
  • 存在某个k ≤ min(m, n) ,使得\(a_i = b_i\)(i = 1,2,...,k-1),\(a_k < b_k\)

其原理就如同英文字典一样,字典前面的单词总是小于后面的

串的抽象数据类型

类型名称:串(string)

数据对象集:串中元素仅由一个字符组成,相邻元素具有前驱和后继关系

操作集:

  1. StrAssign(T,*chars) 生成一个其值等于chars的串T
  2. StrCopy(T,S) 由串S复制得到串T
  3. StrEmpty(S) 若串为空串返回TRUE否则返回FALSE
  4. StrLength(S) 返回s的元素个数称为串的长度
  5. StrCompare(S,T) S>T 返回 >0 ; S=T ,返回 =0 ;
  6. ClearString(&S) 将串S清空
  7. SubString(&Sub,S,pos,len) 用sub返回串S的第pos个字符起长度为len的子串
  8. Index(S,T,pos) 若子串中存在和串T值相同的子串,则返回它在主串中第pos个字符之后第一次出的位置 ;否则函数值为0
  9. Replace(&S,T,V) 用V替换串S中出现的所有与T相等的不重叠的子串
  10. StrInsert(&S,pos,T) 在串S的第pos个字符之前插入串T
  11. StrDelete(&S,pos,len) 从串S中删除从第pos个字符起出长度为len的子串
  12. DestroyString(&S) 串S被销毁

串的存储结构

顺序存储结构

  1. 预定义最大串长度,一般可将串长度值保存在数组的0下标位置,可以方便许多,当然,在C语言中也可通过遍历直到 ‘\0’ 来计算串的长度
  2. 利用堆进行动态存储

由于1方法在串比较小的时侯,浪费空间;而在串比较大时,会发生数据丢失的情况,所以一般多考虑第二种次存储方案

链式存储结构

一般不如顺序存储好用,因为链式存储不可能一个结点只放一个字符,如果那样就会变得无比繁杂,而一个结点存放多少字符,则又需要根据实际情况做出选择,综合来看,其不如顺序存储灵活,性能也不如顺序存储

串的模式匹配算法

串的模式匹配算法为串中特别重要的一个算法

朴素的模式匹配算法