- 24
- 0
- 约8.35千字
- 约 64页
- 2019-06-19 发布于四川
- 举报
在程序设计语言中,串只是 作为输入或输出的常量出现,则只 需存储此串的串值,即字符序列即 可。但在多数非数值处理的程序中, 串也以变量的形式出现。 4.2 串的表示和实现 一、串的定长顺序存储表示 二、串的堆分配存储表示 三、串的块链存储表示 #define MAXSTRLEN 255 // 用户可在255以内定义最大串长 typedef unsigned char SString [MAXSTRLEN + 1]; // 0号单元存放串的长度 一、串的定长顺序存储表示 按这种串的表示方法实现的串的运算时,其基本操作为 “字符序列的复制” 串的实际长度在这个预定义长度的范围内随意设定,超过预定义长度的串值则被舍去,称之为“截断” 特点: Status Concat(SString S1, SString S2, SString T) { // 用T返回由S1和S2联接而成的新串。若未截断, 则返回TRUE,否则FALSE。 return uncut; } // Concat 例如:串的联接算法中需分三种情况处理: T[1..S1[0]] = S1[1..S1[0]]; T[S1[0]+1..S1[0]+S2[0]] = S2[1..S2[0]]; T[0] = S1[0]+S2[0]; uncut = TRUE; } if (S1[0]+S2[0] = MAXSTRLEN) {// 未截断 else if (S1[0] MAXSTRSIZE) { // 截断 else { // 截断(仅取S1) T[1..S1[0]] = S1[1..S1[0]]; T[S1[0]+1..MAXSTRLEN] = S2[1..MAXSTRLEN-S1[0]]; T[0] = MAXSTRLEN; uncut = FALSE; } T[0..MAXSTRLEN] = S1[0..MAXSTRLEN]; // T[0] == S1[0] == MAXSTRLEN uncut = FALSE; } typedef struct { char *ch; // 若是非空串,则按串实用长度分配 //存储区,否则 ch 为NULL int length; // 串长度 } HString; 二、串的堆分配存储表示 通常,C语言中提供的串类型就是以这种存储方式实现的。系统利用函数malloc( ) 和 free( ) 进行串值空间的动态管理,为每一个新产生的串分配一个存储区,称串值共享的存储空间为“堆”。 C语言中的串以一个空字符为结束符,串长是一个隐含值。 这类串操作实现的算法为: 先为新生成的串分配一个存储空间,然后 进行串值的复制。 Status Concat(HString T, HString S1, HString S2) { // 用T返回由S1和S2联接而成的新串 if (T.ch) delete(T.ch); // 释放旧空间 if (!(T.ch =new char[S1.length+S2.length])) exit (OVERFLOW); T.ch[0..S1.length-1] = S1.ch[0..S1.length-1]; T.length = S1.length + S2.length; T.ch[S1.length..T.length-1] = S2.ch[0..S2.length-1]; return OK; } // Concat Status SubString(HString Sub, HString S, int pos, int len) { // 用Sub返回串S的第pos个字符起长度为len的子串 if (pos 1 || pos S.length || len 0 || len S
原创力文档

文档评论(0)