【发布时间】:2021-02-25 09:40:47
【问题描述】:
确切的关键字是指以单个单词表示的关键字,以空格字符开头和结尾(空格、制表符或换行)。我不想返回仅包含我的关键字作为子字符串的单词。
以下是我尝试从包含精确关键字的文本文件中查找和打印行。有没有更简单的方法?我当前的尝试不起作用,因为我不知道如何忽略包含我的关键字作为子字符串的行。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLINESIZE 1024
#define MAXKEYWORD 256
int main()
{
FILE* file = fopen("yankee.txt", "r");
int linenumber =0;
char keyword[MAXKEYWORD];
char keywordline[MAXLINESIZE];
while ((fscanf(file, "%[^\n]%*c", keywordline)) != EOF)
{
linenumber++;
strcpy(keyword,"a");
if(strstr(keywordline,keyword))
{
printf("linenumber = %d\n'%s'\n\n",linenumber,keywordline);
}
}
return 0;
}
文本文件
Yankee Doodle went to town
riding on a pony
Stuck a feather in his cap
And called it macaroni.
所以,输出应该是:
linenumber = 2
'riding on a pony'
linenumber = 3
'Stuck a feather in his cap'
【问题讨论】:
-
fscanf可以读取“单词”,只需fscanf("%s" -
不相关:你不需要在循环内
strcpy()。一次,在循环之外,就足够了。 -
我建议您改用
fgets来阅读整行。然后像strtok这样的东西来“标记”空间上的字符串。在循环中执行此操作,然后使用strcmp查找“关键字”。
标签: c file whitespace keyword