第四章 串
第四章 串
4.1 串类型的定义
4.2 串的表示和实现
4.2.1 定长顺序存储表示
4.2.2 堆分配存储表示
4.2.3 串的块链存储表示
4.1 串类型的定义
一、串和基本概念
串(String)是零个或多个字符组成的有限序
列。一般记作S “a a a …a ” ,其中S 是串名,
1 2 3 n
双引号括起来的字符序列是串值;ai (1≦i≦n)
可以是字母、数字或其它字符;串中所包含的
字符个数称为该串的长度。长度为零的串称为
空串(Empty String),它不包含任何字符。
通常将仅由一个或多个空格组成的串称为空白
串(Blank String)
注意:空串和空白串的不同,例如“ ”和“”分别
表示长度为1的空白串和长度为0的空串。
串中任意个连续字符组成的子序列称为该串的子
串,包含子串的串相应地称为主串。通常将子
串在主串中首次出现时的该子串的首字符对应
的主串中的序号,定义为子串在主串中的序号
(或位置)。例如,设A和B分别为
A “This is a string” B “ is”
则B是A的子串,A为主串。B在A中出现了两次,
其中首次出现所对应的主串位置是3。因此,
称B在A中的序号(或位置)为3
特别地,空串是任意串的子串,任意串是
其自身的子串。
通常在程序中使用的串可分为两种:串变量
和串常量。串常量和整常数、实常数一样,在
程序中只能被引用但不能不能改变其值,即只能
读不能写。通常串常量是由直接量来表示的,
例如语句Error(“overflow”)中“overflow”是直
接量。但有的语言允许对串常量命名,以使程
序易读、易写。如C++中,可定义
const char path[] “dir/bin/appl”;
这里path是一个串常量,对它只能读不能写。串
变量和其它类型的变量一样,其取值是可以改
变的。
二、串的抽象数据定义
串的抽象数据类型定义台书P71
三、串的基本操作
对于串的基本操作,许多高级语言均提供了相
应的运算或标准库函数来实现。下面先介绍
几种在C语言中常用的串运算。
定义下列几个变量:
char s1[20]=“dirtreeformat”,s2[20]=“file.mem”;
char s3[30],*p;
int result;
(1) 求串长(length)
int strlen(char s); //求串的长度
例如:printf(“%d”,strlen(s1)); 输出13
(2 )串复制(copy)
char *strcpy(char to,char from);
该函数将串from复制到串to 中,并且返回一个
指向串to的开始处的指针。
例如:strcpy(s3,s1); //s3=“dirtreeformat”
(3)联接(concatenation)
char strcat(char to,char from)
该函数将串from复制到串to的末尾,并且返回
一个指向串to的开始处的指针。
例如:strcat(s3,”/”)
strcat(s3,s2); //s3=“dirtreeformat/file.mem”
(4) 串比较(compare)