当前位置:
文档之家› 数据结构字符串复制,连接,求子串,KMP
数据结构字符串复制,连接,求子串,KMP
printf("\na=%s\n",a.ch);
break;
case'2':
printf("请输入需要插入的位置:n=");
scanf("%d",&n);
printf("\n");
stringinsert(a,n,b);
printf("\na=%s\n",a.ch);
break;
case'3':
stringconnect(a,b);
#define OVERFLOW -2
typedefintstatus;
typedefstruct
{
char*ch;
intlength;
}str;
statusstringcopy(str&a,strb)
{
//free(a.ch);
if(b.length==0)
{
a.ch='\0';
returnOK;
break;
i++;
}
return*(a.ch+i)-*(b.ch+i);
}
statussubstring(str&a,strb,intn,intpos)
{
a.length=n;
if((a.ch=(char*)malloc(sizeof(char)*(a.length+1)))==NULL)
returnERROR;
inti=0;
*(a.ch+n)='\0';
while(1)
{
*(a.ch+i)=*(b.ch+pos-1);
i++;
pos++;
if(*(a.ch+i)=='\0')
break;
}
returnOK;
}
intnext[20];
voidget_next(stra,intnext[])
{
inti=1,j=0;
inti=pos,j=0;
while(i<=a.length&&j<=sub.length)
{
if(*(a.ch+i-1)==*(sub.ch+j-1)||j==0)
{
i++;j++;
}
else
{
j=next[j];
}
}
if(j>sub.length)
returni-j+1;
else
returnERROR;
printf("1:字符串b复制到a\n2:b字符串插入a中\n3:字符串a和b连接\n4:字符串a和b比较\n5:取字符传a中的子川\n6:在a中查找第pos为后是否有字符串sub\n\n\n");
scanf("%c",&c);
getchar();
switch(c)
{
case'1':
stringcopy(a,b);
}
main()
{
stra,b,sub;
a.ch="abcdefgopqrst";
a.length=13;
b.ch="hjiklm";
b.length=6;
sub.ch="cdefgdo";
sub.length=7;
charc;
intn=0,pos;
printf("a=%s\t\tb=%s\t\tsub=%s\n\n",a.ch,b.ch,sub.ch);
数据结构字符串复制,连接,求子串,KMP
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INEEASLIBE -1
}
if((a.ch=(char *)malloc(sizeof(char)*(b.length+1)))==NULL)
returnERROR;
inti=0;
while(i<b.length)
{
*(a.ch+i)=*(b.ch+i);
i++;
}
*(a.ch+b.length)='\0';
printf("字符串复制成功\n");
if((c.ch=(char*)malloc(sizeof(char)*(c.length+1)))==NULL)
returnERROR;
inti=0,j=0;
while(1)
{
if(*(a.ch+i)=='\0')
break;
*(c.ch+i)=*(a.ch+i);
i++;
}
while(1)
{
if(*(b.ch+j)=='\0')
printf("a=%s起始%d个位置长为%d的子串为%s\n",a.ch,pos,n,sub.ch);
break;
case'6':
get_next(sub,next);
printf("请输入要求检索的起始位置:pos=");
scanf("%d",&pos);
getchar();
printf("\n");
returnOK;
}
statusstringinsert(str&a,intn,strb)
{
if(n<1||n>a.length)
{
printf("插入的位置不合法\n");
returnERROR;
}
strc;
c.length=a.length+b.length;
if((c.ch=(char*)malloc(sizeof(char)*(c.length+1)))==NULL)
break;
*(c.ch+i)=*(b.ch+j);
i++;
j++;
}
*(c.ch+c.length)='\0';
a=c;
printf("字符串连接成功\n");
returnERROR;
}
statusstringcompare(stra,strb)
{
inti=0;
while(1)
{
if((*(a.ch+i)!=*(b.ch+i))||*(a.ch+i)=='\0'||*(b.ch+i)=='\0')
{
returnERROR;
}
inti=0,j=0,l=0,k=0;
while(i<c.length)
{
if(i<n-1)
{
*(c.ch+i)=*(a.ch+i);
j=i;
k=i;
}Hale Waihona Puke elseif(i<=j+b.length)
{
*(c.ch+i)=*(b.ch+l);
l++;
}
else
{
*(c.ch+i)=*(a.ch+k+1);
next[1]=0;
while(i<a.length)
{
if(j==0||*(a.ch+i)==*(a.ch+j))
{
i++;
j++;
next[i]=j;
}
else
{
j=next[j];
}
}
}
statuskmp(strsub,stra,intpos)
{
if(pos<1||pos>a.length)
returnERROR;
printf("a=%s\n",a.ch);
break;
case'4':
if((stringcompare(a,b))==0)
printf("a=b \n");
if((stringcompare(a,b))>0)
printf("a>b\n");
if((stringcompare(a,b))<0)
printf("a<b\n");
break;
case'5':
printf("请输入要求子串的起始位置:pos=");
scanf("%d",&pos);
getchar();
printf("\n");
printf("请输入要求子串的长度:n=");
scanf("%d",&n);
getchar();
printf("\n");
substring(sub,a,n,pos);
if(kmp(sub,a,pos))