#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
#define MAXSTRLEN 255
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef char HString[MAXSTRLEN+1];
typedef int status;
int next[MAXSTRLEN];
char *chars;
typedef struct{
char *ch;
int length;
}SString;
char* ToString(char array[], int array_size)//字符数组转换成字符串
{
char *p;
int i;
p = (char*)malloc(array_size + 1);
for(i = 0; i < array_size; i++)
{
*(p+i) = '0' + array[i];
}
*(p+i) = '\0';
return p;
}
status StrAssign(SString &T,char *chars)//生成一个其值等于串常量chars的串
T
{
int i;
int j;
char *c;
for(i=0,c=chars;*c!='\0';++i,++c);
if(!i)
{
T.ch=NULL;
T.length=0;
}
else
{
if(!(T.ch=(char *)malloc(i *sizeof(char))))
exit(OVERFLOW);
for(j=0;j<i;j++)
{
T.ch[j]=chars[j];
}
T.length=i;
}
return OK;
}
void get_next(SString T,int next[])//求next值
{
int j=1,k=0;
next[1]=0;
while(j<T.length)//abaabcac
{
if(k==0||T.ch[k-1]==T.ch[j-1])
{
++j;
++k;
next[j]=k;
}
else k=next[k];
}
}
int Index(SString S,SString T,int pos)//匹配算法
kmp
{
int i=pos,j=1;
while(i!=S.length+1&&j!=T.length+1)
{
if(j==0||S.ch[i-1]==T.ch[j-1])
{
j++;
i++;
}
else
j=next[j];
}
if(j>T.length-1)
return (i-T.length);
else
return 0;
}
void find(SString keys)//
查找单词
{
status StrAssign(SString &T,char *chars);
int count=0;
SString T;
HString text;
int i=1,j=0;
FILE *fp;
if(!(fp=fopen("1.txt","r")))
{
printf("Open file error!\n");
exit(0);
}
get_next(keys,next);
while(!feof(fp))
{
如果能找到的话 我就不用转了啊