首页 > 解决方案 > 在C中的txt文件中搜索单词

问题描述

如何让我的程序读取文本文件并将文本文件中的单词与我在数组中定义的单词进行比较并打印一条消息。我认为主要问题是 for 循环,因为我不确定它是否正确迭代。这是我的代码:

define MAX_SIZE 1000

int main()
{
    FILE * yourfile;

    char  as_array[MAX_SIZE];
    char name[20];
    const char * keywords[]={"if", "else", "return", "switch", "case", "default", "for", "do", "while", 
                             "break", "continue", "struct", "typedef", "union", "enum", "sizeof", "int", "float", "double", 
                             "void", 
                             "extern",
                             "signed", "unsigned", "long", "short", "static", "const",  "goto", "auto", "register", "volatile"};
    printf("Please write the file you want to open: \n ");
    scanf("%s", name);

    int number_of_keywords = sizeof(keywords)/sizeof(keywords[0]);

    //fopen opens the file; exits with error if the file cannot be opened
    if ((yourfile = fopen(name, "r"))== NULL){
        printf("Could not open file: %s", name);
        exit(1);
    }
    else printf("Your file has been successfully opened!\n");

    while(!feof(yourfile)){
        fgets(as_array, MAX_SIZE, yourfile);
        printf("%s\n", as_array);
        char x = gets(as_array);

        for(int i = 0 ; i<number_of_keywords; ++i){
            if(keywords[i]== x){
                printf("I found word %s\n", keywords[i]);
            }
        }
        return 0;
    }
}

标签: cfile

解决方案


假设您的文本文件是 test.txt 并包含

if
else
return
switch
case

然后这段代码有效,抱歉我重新格式化了一下,0 shd be\o,我硬编码了文件名,但你会明白的,玩得开心。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE 1000

    int main()
    {
        FILE * yourfile;
        int i;
        int number_of_keywords;
        char string[200];
        char  as_array[MAX_SIZE];
        char name[20]="test.txt";
        const char * keywords[]={"if", "else", "return", "switch", "case", "default", "for", "do", "while", 
                                 "break", "continue", "struct", "typedef", "union", "enum", "sizeof", "int", "float", "double", 
                                 "void", 
                                 "extern",
                                 "signed", "unsigned", "long", "short", "static", "const",  "goto", "auto", "register", "volatile"};
      //  printf("Please type file name to open: \n ");
      //  scanf("%s", name);

        number_of_keywords = sizeof(keywords)/sizeof(keywords[0]);

        //fopen opens the file; exits with error if the file cannot be opened
        if ((yourfile = fopen(name, "r"))== NULL){
            printf("Could not open file: %s", name);
            exit(1);
        }
        else printf("Your file has been successfully opened!\n");


      while(  fgets( string, 200 , yourfile))
      {
        // problem : fgets grabs \n
        // remove it
        string[strlen(string)-1]=0;    
        printf( string);
        getchar();
        for( i=0 ; i<number_of_keywords; i++)
        {
         if(!strcmp(keywords[i], string))
                    printf("I found word %s\n", keywords[i]);
        }
       } 

         fclose(yourfile);
            return 0;

    }

推荐阅读