从文件中查找包含给定字符串的行

问题

【问题描述】
从文件中查找包含给定字符串的行。

【输入形式】
从标准输入中分两行分别输入被查找的文件及要查找的字符串(中间不含空格)。

【输出形式】
在屏幕上输出文件中包含给定字符串的行。

【样例输入】
在键盘输入如下文件名及字符串:
test.txt
the
文件test.txt内容如下:
Now is the time
for all good
men to come to the aid
of their party

【样例输出】
屏幕输出为:
this is the time
men to come to the aid
of their party

算法分析

设 int index ( char s[ ], char t[ ] )函数用来在字符串s中查找字符串t。若找到则反回t在s中出现的位置,否则返回-1。其主要查找算法如下:

for(i=0; s[i] != '\0'; i++)
    for(j=i,k=0; t[k] != '\0'; j++,k++)
        s[j]和t[k]进行比较       //不同时break;找到的条件是:t[k]==‘\0’

主要算法如下:
设变量filename,s,line分别用于存储文件名、查找串及文件中一行;
从标准输入中读入文件名和要查找的串到filename和s中;
以读方式打开文件filename;
while 文件中还有内容时读一行到line中
  如果 index(line, s) >= 0
    输出line;

算法实现

#include <stdio.h>
#define MAXLINE  1000
int index(char s[ ], char t[ ]);
int main( )
{
    char filename[64], s[81], line[MAXLINE];
    FILE *fp;
	scanf("%s", filename);
	scanf("%s", s);
	if((fp = fopen(filename, "r")) == NULL){
	      printf("Can't open file %s!\n", filename);
		return 1;
	}
	while(fgets(line, 81, fp) != NULL)
             if(index(line, s) >= 0)
                   printf("%s", line);
    return 0;
}
int index(char s[ ], char t[ ])
{
  int i, j, k;
  for(i =0; s[i] != '\0'; i++){
    for(j=i,k=0;t[k]!='\0'&&s[j]== t[k]; j++,k++)
        ;
    if(t[k] == '\0')
      return ( i);
  }
  return ( -1);
}

发布了140 篇原创文章 · 获赞 149 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章