(4)连接运算 strconcat(S1S2 void strconcat(linkstring *S1, linkstring S2) linkstring p if (s1))(*sl=S2; return) else if(S2)/s1和S2均不为空串的情形*/ p=*s1;/用p查找S1的最后一个字符的位置* while(p->next)p=p->next; p->next=S2;/将串S2连接到S1之后*
(4)连接运算strconcat(S1 ,S2 ) void strconcat(linkstring *S1, linkstring S2) { linkstring p; if (!(*S1) ) {*S1=S2; return;} else if (S2) /*S1和S2均不为空串的情形*/ { p=*S1; /*用p查找S1的最后一个字符的位置*/ while(p->next ) p= p->next; p->next=S2; /*将串S2连接到S1之后*/ } }
(5)求子串运算 substring(sien) linkstring substring(linkstring S,int i, int len) I int k; linkstring p, g,r,t: p=S, k=l /用p查找S中的第个字符/ while(p &&k<i p= p->next; k++i] if (p)(printf("errol\n"); return (null);] else r=dinkstring) malloc(sizeof(linkstrnode)); r->data=p->data; r->next=null
(5)求子串运算substring(S,i,len) linkstring substring(linkstring S,int i, int len) { int k; linkstring p,q,r,t; p=S, k=1; /*用p查找S中的第i个字符*/ while (p && k<i) {p= p->next;k++;} if (!p) {printf("error1\n"); return(null);} else { r=(linkstring) malloc (sizeof(linkstrnode)); r->data=p->data; r->next=null;
k=1;q=r;/用q始终指向子串的最后一个字符的位置* while(p->next&&k<len)/取长度为len的子串* p=p->next k++ t=(linkstring)malloc(sizeof (inkstrnode)) t->data=p->data g->next=t; g=t if (k<len)printf( error 2\n"); return (null;) else {q->next=nul; return(r)丹/处理子串的尾部*
k=1; q=r; /*用q始终指向子串的最后一个字符的位置*/ while (p->next && k<len) /*取长度为len的子串*/ { p=p->next ;k++; t=(linkstring) malloc (sizeof (linkstrnode)); t->data=p->data; q->next=t; q=t; } if (k<len) {printf("error2\n") ; return(null);} else {q->next=null; return(r);} /*处理子串的尾部*/ } }
42字符串的模式匹配 寻找字符串p在字符串t中首次出现的起始位置称 为字符串的模式匹配,其中称p为模式( pattern),t 为正文(text),t的长度远远大于p的长度。 4.21朴素的模式匹配算法 朴素模式匹配算法的基本思想是:用p中的每个字 符去与t中的字符一一比较: 正文t:t1t2……tm…tn 模式p:p1p2……p 如果t1=pt2=P2…tm=pm,则模式匹配成功;否
4.2 字符串的模式匹配 寻找字符串p在字符串t中首次出现的起始位置称 为字符串的模式匹配,其中称p为模式(pattern),t 为正文(text),t的长度远远大于p的长度。 4.2.1 朴素的模式匹配算法 朴素模式匹配算法的基本思想是:用p中的每个字 符去与t中的字符一一比较: 正文t: t1 t2 …… tm……tn 模式p: p1 p2 …… pm 如果t1=p1 ,t2=p2 ,…..tm=pm,则模式匹配成功;否 则
将p向右移动一个字符的位置,重新用p中的字符从 头开始与t中相对应的字符依次比较,即: ti t2 t m+1…n p1 p 2······ Pm-1 p 如此反复,直到匹配成功或者p已经移到使t中剩下 的字符个数小于p的长度的位置,此时意味着模式 匹配失败,表示t中没有子串与模式p相等,我们约 定返回-1代表匹配失败 朴素模式匹配算法的具体实现如下:
将p向右移动一个字符的位置,重新用p中的字符从 头开始与t中相对应的字符依次比较,即: t1 t2 t3 …… tm tm+1……tn p1 p2…… pm-1 pm 如此反复,直到匹配成功或者p已经移到使t中剩下 的字符个数小于p的长度的位置,此时意味着模式 匹配失败,表示t中没有子串与模式p相等,我们约 定返回-1代表匹配失败。 朴素模式匹配算法的具体实现如下: