内容受限的线性表
串(String): 由零个或多个任意字符组成的有限序列。字串(Substring): 串中任意个连续字符组成的序列。主串(Main String): 包含子串的串。字符位置: 指字符在序列中的序号,即该字符在串中的位置。字串位置: 指字串的第一个字符在主串中的位置。空格串(Space String): 由一个或多个空格组成的串,与空串(Empty String)不同。串相等: 当且仅当两个串的长度相等且各个对应位置上的字符相这两个串才是相等的。
数学表示
S = “a1a2…an”(n ≥ 0)
注:S为串名,a1a2…an为串值,n为串长。
ADT String(抽象数据类型-串) {
数据对象: D = { ai | ai ∈ CharacterSet },记为 V,i = 1, 2, …, n,n ≥ 0
结构关系: R = { | ai, ai + 1 ∈ V, i = 1, …, n - 1; n - 1 ≥ 0 }
基本操作:
StrAssign(&T, chars) // 串赋值操作:前提是chars是字符串常量。结果是生成一个值等于chars的串T。
StrInsert(S, pos, T) // 字串插入操作:前提是串S存在,1 ≤ pos ≤ StrLength(S) + 1。结果是在串S的第pos个字符之前插入串T。
StrDelete(S, pos, len) // 操作前提:串S存在,1 ≤ pos ≤ StrLength(S) + 1。结果是删除串S中从第pos个字符起长度为len的子串。
StrCopy(S, T) // 由串T复制得串S。
StrEmpty(S) // 若串S为空串,则返回TRUE,否则返回FALSE。
StrCompare(S, T) // 串比较操作:前提是串S和T存在。结果是根据S和T的字典序比较结果返回相应的值。
StrLength(S) // 返回串S的长度,即串S中的字符个数。
StrClear(S) // 将S清为空串。
ConCat(&T, S1, S2) // 将串S1和S2的值连接在串T的后面。
Substring(Sub, S, pos) // 用Sub返回串S的第pos个字符起的子串。
StrIndex(S, pos, T) // 若串S中存在和串T相同的子串,则返回它在串S中第pos个字符之后第一次出现的位置;否则返回0。
StrReplace(S, T, V) // 用V替换串S现的所有与T相等的不重叠的子串。
StrDestroy(S) // 销毁串S。
}ADT string
define MAXSIZE 255
typedef struct {
char ch[MAXSIZE + 1]; // 存储串的一维数组
int Length; // 串的当前长度
} SString;
define CHUNKSIZE 80 // 块的大小可由用户定义
typedef struct Chunk {
char ch[CHUNKSIZE];
struct Chunk next;
} Chunk;
typedef struct {
Chunk head, tail; // 串的头指针和尾指针
int curlen; // 串的当前长度