串的定义
串(string)是由零个或多个字符组成的有限序列。
串中字符的个数n称为串的长度;n = 0时的串称为空串;
子串:串中任意连续个字符组成的子序列称为该串的子串;
主串:包含子串的串相应的称为主串;
字符位置:字符在序列中的序号为该字符在串中的位置;
子串的位置:子串第一个字符在主串中的位置;
空格串:由一个或多个空格组成的串,与空串不同;
串相等:当且仅当两个串的长度相等并且各个对应位置上的字符都相等;所有的空串都是相等的。
串的存储结构
串的顺序存储结构
类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。在串的定长顺序存储结构中,为每个串变量分配一个固定长度的存储区,即定长数组。
#define MAXLEN 255
typedef struct{
char ch[MAXLEN]; //每个分量存储一个字符
int length; //串的实际长度
}SString;
堆分配存储表示
堆分配存储表示仍然以一组地址连续的存储单元存放串值的字符序列,但他们的存储空间是在程序执行过程中动态分配得到的。
typedef struct{
char *ch; //按串长分配存储区,ch指向串的基地址
int length ; //串的长度
}HString;
在C语言中,存在一个称之为“堆”的自由存储区,并用malloc()和free()来完成动态存储管理。
利用malloc()为每个新产生的串分配一块实际串长所需的存储空间,若分配成功,则返回一个指向起始地址的指针,作为串的基地址,这个串由ch指针来指示;若分配失败,则返回NULL。已分配的空间可用free()释放掉。
串的基本操作
StrAssign(&T, chars)
: 赋值操作,把串T赋值为chars;StrCopy(&T, S)
: 复制操作,把串S复制得到串T;StrEmpty(S)
: 判空操作,若S为空串,则返回TRUE,否则返回False;StrCompare(S, T)
: 串的比较操作,参照英文词典排序方式;若S > T,返回值>0; S = T,返回值=0 (需要两个串完全相同) ; S < T,返回值<0;StrLength(S)</