一、串的基本概念
(一)串的定义
串是由0个或多个任意字符组成的字符序列,一般记作:
s = “s1s2s3…sn”
其中,s是串名,双引号为串的定界符,引号中间的字符序列为串值,引号本身不属于串的内容。
si(1≤i≤n)是一个任意字符,成为串的元素,是构成串的基本单位,i是它在整个串中的序号;n为串的长度,表示串中所包含的字符个数。当n=0时,称为空串。
以下是一些串的示例:
a = "Welcome to Beijing"
b = "Welcome"
c = "Bei"
d = " "
(二)几个术语
-
子串与主串
串中任意连续的字符组成的子序列称为该串的子串,包含子串的串相应地称为主串。上例中,b是a的子串,a是主串。
-
子串的位置
子串的第一个字符在主串中的序号称为子串的位置。
-
串相等
两个串的长度相等且对应字符都相等,则称为串相等。
-
空格串
串中的字符全是空格。上例中,d是空格串。
二、串的基本运算
(一)求串长
操作条件:串s存在
操作结果:求出串s中的字符的个数
设串s1 = “abc123”,s2=“bhjkl433”,则StrLength(s1) = 6,StrLength(S2) = 8。
(二)串赋值
操作条件:s1是一个串变量,s2是一个串常量或串变量(通常,为串常量时称为串赋值,为串变量时称为串复制)。
操作结果:将s2的串值赋值给s1,s1原来的值被覆盖。
设串s1 = “abc123”,s2 = “bhjk433”,则StrAssign(s1, s2),s1、s2的值都是"bhjk433"。
(三)串连接
操作条件:s1,s2存在。
操作结果:两个串的连接就是将一个串的串值紧接着放在另一个串的后面,连接成一个串。对于StrConcat(s1, s2, s)来说,产生新串s,s1、s2不改变;对于StrConcat(s1, s2)来说,在s1的后面连接s2的串值,s1改变,s2不改变。
例如,s1 = “abc”,s2 = “123”,前者操作结果是s = “abc123”,后者操作结果是s1 = “abc123”。
(四)求子串
操作条件:串s存在,1≤i≤StrLength(s),0≤len≤StrLength(s)-i+1。
操作结果:SubStr(s, i, len)返回从串s的第i个字符开始的长度为len的子串,len为0时得到的是空串。
例如:SubStr(“abcdefghi”, 3, 4) = “cdef”。
(五)串比较
操作条件:s1、s2存在。
操作结果:若s1 = s2,则StrCmp(s1, s2)返回值为0;若s1 < s2,则返回负值;若s1 > s2,则返回正值。
(六)子串定位
操作条件:串s、t存在。
操作结果:若 t∈s,则返回 t 在 s 中首次出现的位置,否则返回值为-1。
例如:StrIndex(“abcdebda”, “bc”) = 2,StrIndex(“abcdebda”, “ba”) = -1
(七)串插入
操作条件:串s、t存在,1≤i≤StrLength(s)+1。
操作结果:StrInsert(s, i, t)将串t插入串s的第i个位置上,s的串值发生改变。
(八)串删除
操作条件:串s存在,1≤i≤StrLength(s),0≤len≤StrLength(s)-i+1。
操作结果:StrDelete(s, i, len) 删除串s中从第i个字符开始的长度为len的子串,s的串值改变。
(九)串替换
操作条件:串s、t、r存在,t不为空。
操作结果:StrRep(s, t, r)用串r替换串s中出现的所有与串t相等的不重叠的子串,s的串值改变。
以上是串的几个基本操作。其中前5个操作是最为基本的,不能用其他的操作来合成;因此,通常将这5个基本操作成为最小操作集。