第四章串 41串及其运算 是由零个或多个字符组成的有限序列,一般记为 sa1a2an3(n≥0) 其中,s是串名,用单引号(也可以是用双引号括起来的) 括起来的字符序列是串的值。a1可以是字母、数字或其他 字符;串中字符的个数n成为串的长度
4.1 串及其运算 是由零个或多个字符组成的有限序列,一般记为 s=“a1a2…an”(n0) 其中,s是串名,用单引号(也可以是用双引号括起来的) 括起来的字符序列是串的值。ai可以是字母、数字或其他 字符;串中字符的个数n成为串的长度。 第四章 串
子串:串中任意个连续的字符组成的子序列。 主串:包含子串的串相应地称为主串 位置:字符在序列中的序号。子串在主串中的位置则以子 串的第一个字符在主串中的位置来表示 相等:两个串的长度相等,并且对应位置的字符都相等。 注意区分空串与空格串的区别
子串:串中任意个连续的字符组成的子序列。 主串:包含子串的串相应地称为主串。 位置:字符在序列中的序号。子串在主串中的位置则以子 串的第一个字符在主串中的位置来表示。 相等:两个串的长度相等,并且对应位置的字符都相等。 注意区分空串与空格串的区别
串的逻辑结构和线性表的区别: 串的数据对象约束为字符集。 2.线性表的基本操作大多以“单个元素”为操作对象,而 串的基本操作通常以“串的整体”作为操作对象。 对于串可以定义以下运算: 1.置串为一个空串; 2.判断一个串是否为空串 3.求一个串的长度; 4.将两个串拼接在一起构成一个新串; 5.在一个串中,求从串的第i个字符开始连续j个字符所 构成的子串; 6.如果串S2是S1的子串,则可求串S2在串S1中第一次出 现的位置
串的逻辑结构和线性表的区别: 1. 串的数据对象约束为字符集。 2. 线性表的基本操作大多以“单个元素”为操作对象,而 串的基本操作通常以“串的整体”作为操作对象。 对于串可以定义以下运算: 1. 置串为一个空串; 2. 判断一个串是否为空串 3. 4. 5. 在一个串中,求从串的第i个字符开始连续j个字符所 6. 如果串S2是S1的子串,则可求串S2在串S1中第一次出 现的位置
4.2串的存储表示 1.定长顺序表示 # define maXnum1000/米串允许的最大字符个数*/ struct Seqstring/*顺序串的类型*/ char c[MAXNUMI int n: I SeqString, *PSeqString
1. 定长顺序表示 #define MAXNUM 1000 /* 串允许的最大字符个数 */ struct SeqString /* 顺序串的类型 */ { char c[MAXNUM]; int n; }SeqString, *PSeqString; 4.2串的存储表示
算法4.1求顺序表示的串的子串 PSegString subStr seg (pseqstring s, int i, int j) 所指的顺序串中第i(1>0)个字符开始连续j个字符所构成的子串 PSeqstring s1 in t Im, s1= createNullStr seq() f (s1==NULL) return NULL f(i>0&&i<=s->n&j>0) if( s>n< 1+j-1)j=s->n-i+ for(k=0; k<j: k++) s1->c[k]=s->c[i+k-1]; 1>c[j=\0’; 1->n else s1->c[0]=\0’; return(s1)
PSeqString subStr_seq(PSeqString s,int i,int j) /* 求从s所指的顺序串中第i(i>0)个字符开始连续j个字符所构成的子串 */ { PSeqString s1; int k,m; s1 = createNullStr_seq( ); if (s1==NULL) return NULL; if ( i>0 && i<=s->n && j>0 ) { if ( s->n < i+j-1 ) j = s->n -i+1; for (k=0;k<j;k++) s1->c[k]=s->c[i+k-1]; s1->c[j]='\0' ; s1->n =j; } else s1->c[0]='\0' ; return(s1); } 算法4.1 求顺序表示的串的子串