字符串的查找

来源:百度知道 编辑:UC知道 时间:2024/05/12 03:53:09
要求:扩充模式匹配算法,实现查找出所有与子串相同的字符串,并标识出各子串在原串中的位置,提示可用一个数组来存储位置。程序文件名为csearch.c

//作者:baihacker
//时间:9.12.2006
#include <stdio.h>
#include <string.h>

/*x,m,y,n为需要匹配的数据
s存储匹配位置c为匹配数*/
void kmp(x,m,y,n,s,c);

void find(x,m,y,n,s,c)
char *x;
int m;
char *y;
int n;
int* s;
int* c;
{
int i, j, t;
*c=0;
for (i=0;i<m-n+1;i++)
{
t = 0;
for (j=0;j<n;j++)
if (*(y+j)==*(x+i+j))
t++;
if (t==n)
s[(*c)++] = i;
}
}

void main()
{
char* x="12312332312343123123";
char* y="123";
int m = strlen(x);
int n = strlen(y);

int s[50];
int c;
int i;
int j;
find(x,m,y,n,s,&c);

for (j=0;j<c;j++)
printf("%d\t",s[j]);
}

void kmp(x,m,y,n,s,c)
char *x;
int m;
char *y;
int n;
int* s;
int* c;
{
int f[50];//失败函