C语言中,查找文本文件中的某个单词可以通过多种方法来实现。可以逐行读取并使用strstr,也可以逐字节读取并手动匹配,还可以使用正则表达式库等方法,具体选择哪一种可以根据具体的需求和文件大小、性能要求等因素来决定。

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;
}

推荐文档

相关文档

大家感兴趣的内容

随机列表