执行 strsub(a, 4, 6,sub)有sub = "cil"
执行strsub(a, 1, 1,sub)有sub = "p"
利用求子串和联接两种运算,可实现对串的插入、删除和修改.
例如,给定两个串s1="datastructure" 和s2 = "Ф",若欲在串s1的第4个字符与第5个字符之间插入串s2的值,则可通过下述的基本运算来完成:
strconcat(s, strsub(s1, 1, 4, sub1), s2, strsub(s1, 5, 13, sub2))
而strconcat(s, strsub(s1, 1, 2, sub1),strsub(s1, 5, 13, sub2))的运算结果是删去子串"ta".
5) strindex(a, b)
这是一个求子串在主串中序号的函数,称为子串定位函数,其结果为一整数.若b是a的子串,则返回值为b在a中第一次出现的第一个字符在a中的序号;若b不是a的子串,则返回值为-1.
例如,若s="a+b+c",s1="+",则strindex(s,s1) = 2
"+"出现了两次,其中首次出现所对应的主串位置是2.因此,称s1在s中的序号(或位置)为2.而strindex("element","nts") = 0
6) strequal(a, b)
判别两串是否相等.两个串相等是指两个串长度相等,并且各对应位置上的字符也都相同.a和b为串名或串值, :
若串a和b相等,则返回1,否则返回0.
若a="child",b="chald",则执行 strequal (a,b) 将返回0.
7) streplace(&a, b, c)
置换运算.它的含义是,若b是a的子串,则用串c去取代串a中所有的b;若b不是a的子串,则经运算后a保持不变.例如:
若a ="A1+A2(t+A3",b="+",c ="- ",则streplace(a, b, c) ="A1-A2(t-A3"
而streplace(a, "/", c)="A1+A2(t+A3"
置换运算对于文本的修改是很有用的.插入字符到文本中,或修改和删除文本中的某些字符,都可以用此运算来实现.
8)strcmp (s, t)
串比较函数.比较串s和t如果s
result=strcmp("12","12"result=0
result=strcmp("Joe","Joseph"); result<0
9)strempty (s)
判断串s是否为空串.若s为空串,则反回1,否则返回0.
10) strclear(&)
清空函数.将串s清空,成为一个空串.
11) strcopy(&t,s)
串拷贝函数.将串t拷贝到串s中.
12)strinsert (&s,i,t)
串插入函数.在串s的第i个字符之前插入串t.
13)strdelete(&s,i,j)
串删除函数.将串s中从第i个到第j个字符全部删除.
以上定义了串的基本操作,但在不同的程序设计语言中串的基本操作不完全相同.使用时应查阅相应语言的手册,遵循它的规定.C语言标准库函数
5.2 串的存储结构和基本运算的实现
串的存储方式取决于即将对串所进行的操作.串在计算机中有三种表示方法,1最简单的处理方法是将串定义成字符型数组,称为定长顺序存储表示.在此,数组名即为串名,从而实现了从串名直接访问串值.用这种方法处理,串的存储空间是在编译阶段完成的,其大小不能更改.2另一种处理方法被称为堆分配存储表示.这种表示法的特点是,仍然用一组地址连续的存储单元来依次存储串中的字符序列,但串的存储空间是在程序运行时根据串的实际长度动态分配的.3 串也可以采用链式结构表示,即块链存储表示.
由于串是一种特殊的线性表,所以串的存储表示和线性表类似,但又不完全相同.
5.2.1 定长顺序存储表示
这种存储结构也称为静态存储分配的顺序表.就是把串所包含的字符序列相继存入一组连续的存储单元中.目前大多数计算机是以字节(byte)为存取单位的,而一个字符通常又恰好占用一个字节,这自然就形成了每个存储单元存放一个字符的分配方式.在这一方式中,可不存储串长的值,而以特定的字符作为结束符,例如,以字符"/0"为串结束符,并约定它不出现在各串变量的串值中;也可专门设定一个单元来存储串的长度.