数据结构(C语言)第四章 字符串

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1≤i≤StrLen(S)
操作结果:从串S中删除第i个字符 起长度为j的子串
对于串的基本操作集可以有不同的 定义方法,在使用高级程序设计语言中的串 类型时,应以该语言的参考手册为准。
例如:C语言函数库中提供下列串处理函数:
gets(str) 输入一个串; puts(str) 输出一个串; strcat(str1, str2) 串联接函数; strcpy(str1, str2, k) 串复制函数; strcmp(str1, str2) 串比较函数; strlen(str) 求串长函数;
主串:包含子串的串
字符在串中的位置:字符在序列中的序号
子串在串中的位置:子串的第一个字符在 主串中的位置
串的基本运算
• 串插入 值
• 求串长 较
• 串联接 子串
• 串定位
串赋 串比
求 串
StrAssign (T, chars)
初始条件:chars 是字符串常量。 操作结果:把 chars 赋为 T 的值。
存储密度
=
数据元素所占存储位 实际分配的存储位
#define CHUNKSIZE 80 // 可由用户定义块
大小
typedef struct Chunk { // 结点结 构
char ch[CUNKSIZE]; struct Chunk *next; } Chunk; typedef struct { // 串的链表结构 Chunk *head, *tail; // 串的头和尾 指针
// 若是非空串,则按串实用长度分 //存储区,否则 ch 为NULL int curlen; // 串长度 } String;
通常,C语言中提供的串类型就是 以这种存储方式实现的。系统利用函数 malloc( ) 和 free( ) 进行串值空间的 动态管理,为每一个新产生的串分配一个 存储区,称串值共享的存储空间为“堆”。
初始条件:串S, T和 V 均已存在, 且 T 是非空串。
操作结果:用 V 替换主串 S 中 出现 的所有与
(模式串)T 相等的子串。
例如: 假设 S = abcaabcaaabca, T = b 若 V = x , 则经置换后得到
S = axaxaax
若 V = bc , 则经置换后得到 S = abcabcaabc
操作结果:
返回串 S 的第 i个字符起 长度为 j的子串。
子串为“串”中的一个字符子序列 例如:
SubStr( commander , 4, 3) 求得 sub = man ;
SubStr(commander , 1, 9) 求得 sub = commander
SubStr( commander , 9, 1) 求得 sub = r
字符串 字符串:是 n(S(tri0n)g)个字符的有限序
列,
记作 S : “c1c2c3…cn” 其中,S 是串名字
“c1c2c3…cn”是串 值
ci 是串中字符 n 是串的长度。
例如, S = “Tsinghua University”
空串:零个字符的串称为空串 记作 “Ø”
子串:串中任意个连续的字符组成的子序 列
C语言中的串以一个空字符为结束符, 串长是一个隐含值。
这类串操作实现的算法为:
先为新生成的串分配一个存储空间,然后 进行串值的复制。
三、串的块链存储表示
也可用链表来存储串值,由于串的数据 元素是一个字符,它只有 8 位二进制 数,因此用链表存储时,通常一个结点 中存放的不是一个字符,而是一个子串。
Insert (S, i, T)
初始条件:串S和T存在,
1≤i≤StrLength(S) 操例如作:结S果=:c在ha串teSr的第,Ti个= 字r符ac之,后
则执行 Insert(插S,入4串, T。) 之后得 S = chatracer
Delete (S, i,
初始条件:串S存在
4.2 串的存储结构
在程序设计语言中,串只 作为输入或输出的常量出现,则只 需存储此串的串值,即字符序列即 可。但在多数非数值处理的程序中, 串也以变量的形式出现。
一、串的定长顺序存储表示 二、串的堆分配存储表示 三、串的块链存储表示
一、串的定长顺序存储表示
#define MAXSTRLEN 255 // 用户可在255以内定义最大
SubStr(“commander”, 4, 7) sub = ?
SubStr(“beijing”, 7, 2) = ? sub = ?
起始位置和子串长度之间存在约束关系
SubStr(stude来自百度文库t, 5, 0) =
长度为 0 的子串为“合法”串
Index (S, T)
初始条件:串S和T存在,T是非空串
初始条件:串 S 和 T 存在。
操作结果:若S T,则返回值 0;
若S T,则 返回值 0;
若S T,则 例如:StrCm返p(“回d值ata”0,。“state”) < 0
StrCmp(“cat”, “case”)
StrLen (S) 初始条件:串 S 存在。
操作结果:返回 S 的元 素个数,称为串的长度。
操作结果: 若主串 S 中存在和串 T

相同的子串, 则返回它
在主串 S 中第一次出现的位置,否则
函数值为0。
“子串在主串中的位置”意指子串 中的第一个字符在主串中的位序。
假设 S = abcaabcaaabc , T = bca Index(S, T) = 2;
Replace (S, T, V)
Strcat ( S1, S2)
初始条件:串 S1 和 S2 存 在。
操作结果:返回由 S1 和 S2 联接
例如: St而rca成t(的新ma串n,。kind)
求得 S1 = mankind
SubStr( S, i, j)
初始串条件S :存在,1≤i≤StrLen(S)
且 0≤j≤StrLen(S) - i+1。
typedef unsigned char String [MAX
// 0号单元存放串的长度
特点:
串的实际长度可在这个予定义 长度的范围内随意设定,超过予定 义长度的串值则被舍去,称之为 “截断”
按这种串的表示方法实现的串 的运算时,其基本操作为 “字符序 列的复制”
二、串的堆分配存储表示
typedef struct { char *ch;
相关文档
最新文档