在C中的txt文件中搜索单词

时间:2019-11-01 17:46:26

标签: c file

如何使程序读取文本文件,并将文本文件中的单词与我在数组中定义的单词进行比较,然后输出消息。我认为主要问题是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;
    }
}

1 个答案:

答案 0 :(得分:0)

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

if
else
return
switch
case

然后这段代码起作用了,抱歉,我重新设置了一下,然后将0 shd设置为\ 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;

    }