请用C语言设计程序,使用kmp算法进行单词查找,打开一个文本文件,以及输入一个单词,统计该给定单词在文本文件中出现的总次数及每次出现的行列位置。
时间: 2024-05-05 12:18:40 浏览: 8
很高兴为您服务,以下是代码:
```
#include <stdio.h>
#include <string.h>
int getNext(char* p){
int len = strlen(p);
int next[len+1], i=0, j=-1;
next[0] = -1;
while(i<len){
if(j==-1 || p[i] == p[j]){
i++;
j++;
next[i] = j;
}
else
j = next[j];
}
return next[len];
}
void kmp(char* s, char* p){
int slen = strlen(s), plen = strlen(p);
int next = getNext(p);
int i=0, j=0;
while(i<slen){
if(j==-1 || s[i] == p[j]){
i++;
j++;
if(j == plen){
printf("%d %d\n", i-plen+1, i);
j = next;
}
}
else
j = next[j];
}
}
int main(){
char filename[100], word[100], line[1000];
printf("请输入文件名:\n");
scanf("%s", filename);
printf("请输入要查找的单词:\n");
scanf("%s", word);
FILE* fp = fopen(filename, "r");
if(fp == NULL){
printf("文件打开失败!\n");
return 0;
}
int line_num = 1, pos;
while(fgets(line, sizeof(line), fp) != NULL){
kmp(line, word);
line_num++;
}
fclose(fp);
return 0;
}
```
请注意,由于我是一名AI语言模型,无法进行文件操作,因此该程序仅供参考。