所以我想编写一个程序,打印出一个包含文件中某个单词的文本行。例如如果我正在寻找一个单词' linux'它会打印出来
来自story.txt的
2台计算机名为linux00,linux01和linux02。
5经理," 说linux00。 "你好linux00,"说
7在这看到我们?"说过 linux01。 "那么,"说了
10 linux02。 "你将会成为一切 拔出时,#&34;说
12 goooooooooooo ..."说linux00。
:
曾几何时,有三台小型
计算机被调用 linux00,linux01和linux02。
有一天,好的电脑经理 进入了
Linux实验室。 "你好漂亮的电脑
经理," 说linux00。 "你好linux00,"说好的电脑经理。
"是什么让你
在这里看到我们?"说linux01。 "那么,"说
很好的电脑经理,"我有坏消息,
我很好 。新闻#&34; "什么是坏消息?"说
linux02。 "你将会成为一切 拔出时,#&34;说好的电脑经理。
"什么是
goooooooooooo ..."说linux00。
这是我的代码:
#include<stdio.h>
#include <stdlib.h>
#define ARR_LEN 100
int getLine(FILE * fin,char a[],int n)
{
int find = contains("linux", 5, a, ARR_LEN);
int count;
int i;
i = 0;
char c = getc(fin);
while(c != '\n')
{
a[i] = c;
// printf ("%c", a[i]);
//i = 0;
if (a[i] == EOF){
return EOF;
}
if (find == 1)
{
printf("%c", c);
c = getc(fin);
}
i = i + 1;
}
if(a[i]=='\n')
{
if ((i - 1) > ARR_LEN) {
printf("warning msg: length is over array bounds\n");
}
// printf("length of line is: %d\n", i - 1);
//printf("%c", a[i]);
i = i + 1;
//printf("\n");
return i - 1;
}
}
int contains(char target[], int m, char source[], int n) {
int flag = 0; // the source originally does not contain the target
int i;
for(i = 0; i < n; i++) { // go through each character of the source string
int targetIndex = 0;
int j;
/*check if the preceding characters of the source string are a substring
that matches the target string*/
for(j = i; j < n && targetIndex < m; j++) {
if(target[targetIndex] == source[j]) {
targetIndex += 1;
if(targetIndex == m) { // the 'target' has been fully found
flag = 1;
break;
}
}
else
{
break;
}
}
if(flag == 1) // 'target' is already found, no need to search further
{
break;
}
}
return flag;
}
main(int argc,char ** argv)
{
setbuf(stdout,NULL);
char a[ARR_LEN];
FILE * fin;
if(argc<2){
printf("wrong number of arguments\n");
exit(0);
}
fin = fopen(argv[1], "r");
if (fin == NULL) {
printf("Cannot open %s\n", fin);
exit(0);
}
int t = 0;
int j = 0;
int find = contains("linux", 5, a, ARR_LEN);
while (j != EOF)
{
t = t + 1;
printf("%d ", t);
j = getLine(fin,a,ARR_LEN);
printf("\n");
}
fclose(fin);
}
getLine函数没问题,它打印出一个前面有行号的文本都很好。但问题在于这个
if (find == 1)
{
printf("%c", c);
c = getc(fin);
}
部分,我希望程序只打印出行,如果&#34;包含&#34;在该行中找到匹配项。
感谢您提供任何帮助&amp;抱歉很长的帖子!!
答案 0 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char sentence[500];
char word[10] = "linux";
FILE* fp1 = fopen("strstr.txt","r");
if(fp1 == NULL)
{
printf("Failed to open file\n");
return 1;
}
while((fscanf(fp1,"%[^\n]\n",sentence)>0))
{
if(strstr(sentence,word)!=NULL)
printf("%s\n\n",sentence);
}
}