资源简介

在一个文件中查找某个关键词,并把出现该关键词的行及行号显示出来。 使用C语言的字符串存储结构来实现字符串的操作,编写函数index实现在一个传中查找子串的功能。然后从文件中每次读入一行,作为一个主串看待,然后查找是否存在待查找的关键词(子串),如果有则显示该行内容及行号,否则继续处理下一行。

资源截图

代码片段和文件信息

#include 
#include 

#define MAXSTRLEN 255         //最大串长
typedef char SString[MAXSTRLEN+1];   //串的定长顺序存储表示
int next[MAXSTRLEN];            //KMP算法中用到的next


void get_next(SString Tint next[])   //求next值
{
int j=1k=0;
next[1]=0;
    while(j{
   if(k==0||T[k]==T[j]) 
   {
    ++j;++k; 
    if(T[j]!=T[k]) next[j]=k;
    else next[j]=next[k];
   }
   else k=next[k];
}
}


int Index(SString SSString Tint pos) //KMP算法
{
int i=posj=1;
   while(i<=S[0]&&j<=T[0])
   {
    if(j==0||S[i]==T[j]) {++i;++j;}
    else
     j=next[j];
   }
   if (j>T[0]) return (i-T[0]);
   else
    return 0;
}

int lenth(SString str)    //求串长
{
int i=1;
while(str[i]) i++;
return(i-1);
}

void find(char name[]SString keys) //查找函数,该函数是整个程序的重要部分,对于输入的每一个
{                                    //要查找的关键字,从小说文件中逐行读取字符串查找
SString text; //存放从小说文件读取的一行字符串      
int i=1j=0knum=0;   //i用于存放行号,j用于存放列号k用于输出格式的控制
FILE *fp;
if (!(fp=(fopen(name“r“)))) //打开小说文件
{
   printf(“Open file error!\n“);
   exit(0);

评论

共有 条评论