1、逐行读取并使用strstr
通过fgets
逐行读取文件内容,并使用strstr
函数在每一行中查找单词。
#include <stdio.h>
#include <string.h>
// 逐行读取并使用strstr
void find_word_in_file_method1(const char *filename, const char *word) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件\n");
return;
}
char line[1024];
int line_number = 1;
while (fgets(line, sizeof(line), file)) {
if (strstr(line, word)) {
printf("在第 %d 行找到: %s", line_number, line);
}
line_number++;
}
fclose(file);
}
// 主函数
int main() {
const char *filename = "test.txt";
const char *word = "example";
const char *pattern = "example";
printf("逐行读取并使用strstr\n");
find_word_in_file_method1(filename, word);
return 0;
}
2、逐字节读取并手动匹配
逐字节读取文件内容,手动检查是否匹配单词。
#include <stdio.h>
#include <string.h>
void find_word_in_file(const char *filename, const char *word) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件\n");
return;
}
int word_len = strlen(word);
int pos = 0;
char ch;
int match = 0;
while ((ch = fgetc(file)) != EOF) {
if (ch == word[match]) {
match++;
if (match == word_len) {
printf("找到单词: %s\n", word);
match = 0;
}
} else {
match = 0;
}
}
fclose(file);
}
// 主函数
int main() {
const char *filename = "test.txt";
const char *word = "example";
const char *pattern = "example";
printf("\n逐字节读取并手动匹配\n");
find_word_in_file(filename, word);
return 0;
}
3、使用正则表达式库
使用PCRE库来查找符合正则表达式模式的单词。
#include <stdio.h>
#include <string.h>
#include <pcre.h>
void find_word_in_file(const char *filename, const char *pattern) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件\n");
return;
}
char line[1024];
int line_number = 1;
const char *error;
int error_offset;
pcre *re = pcre_compile(pattern, 0, &error, &error_offset, NULL);
if (re == NULL) {
printf("PCRE编译错误\n");
return;
}
while (fgets(line, sizeof(line), file)) {
int ovector[30];
int rc = pcre_exec(re, NULL, line, strlen(line), 0, 0, ovector, 30);
if (rc >= 0) {
printf("在第 %d 行找到: %s", line_number, line);
}
line_number++;
}
pcre_free(re);
fclose(file);
}
// 主函数
int main() {
const char *filename = "test.txt";
const char *word = "example";
const char *pattern = "example";
printf("\n使用正则表达式库\n");
find_word_in_file(filename, word);
return 0;
}