串(顺序串)

来源:互联网 发布:淘宝付款失败钱扣了 编辑:程序博客网 时间:2024/06/05 00:20
#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXSIZE 100//串的结构体typedef struct{    char str[MAXSIZE];    int len;}SeqString;//初始化串SeqString *InitString(SeqString *S){    S=(SeqString *)malloc(sizeof(SeqString));    S->len=0;    return S;}//求串长int StrLen(SeqString *S){    return S->len;}//创建顺序串void CreatString(SeqString *S){    char str[MAXSIZE];    printf("Input String:");    gets(str);    while(str[S->len]!='\0')    {        S->str[S->len]=str[S->len];        S->len++;    }    S->str[S->len]='\0';}//遍历顺序串void TraverseSting(SeqString *S){    puts(S->str);}//复制顺序串SeqString *StrCopy(SeqString *S,SeqString *s){    int i;    s=InitString(s);    for(i=0;i<=S->len;i++)    {        s->str[i]=S->str[i];    }    s->len=S->len;    return s;}//求顺序串子串SeqString *SubStr(SeqString *S,int pos,int len,SeqString *Sub){    Sub=InitString(Sub);    int i;    if(pos<1||pos>S->len||len<0||len>S->len-pos-1)    {        printf("Position or len error!\n");        return 0;    }    for(i=0;i<len;i++)    {        Sub->str[i]=S->str[pos+i-1];    }    Sub->str[i]='\0';    Sub->len=len;    return Sub;}//删除顺序串子串SeqString *DeleteStr2(SeqString *S,int pos,int len){    int i;    if(pos<1||pos>S->len||len<0||len>S->len-pos+1)    {        printf("Position or len error!\n");        return 0;    }    for(i=pos+len-1;i<S->len;i++)    {        S->str[i-len]=S->str[i];    }    S->len=S->len-len;    S->str[S->len]='\0';    return S;}//KMP算法-next数组void get_next(SeqString *S,int *next){    int i=1,j=0;    next[1]=0;    while(i<S->len)    {        if(j==0||S->str[i]==S->str[j])        {            ++i;            ++j;            next[i]=j;        }        else            j=next[j];    }}int Index_kmp(SeqString *S,SeqString *t){    int i=1,j=1;    int next[MAXSIZE];    get_next(S,next);    t=InitString(t);    CreatString(t);    while(i<=S->len&&j<=t->len)    {        if(j==0||S->str[i-1]==t->str[j-1])        {            ++i;            ++j;        }        else            j=next[j];    }    if(j>t->len)    {        printf("%d!\n",i-t->len);        return i-t->len;    }    else        return 0;}//主函数int main(){    SeqString *S;    S=InitString(S);    CreatString(S);}
0 1
原创粉丝点击