Как читать слова из файла и искать их в дереве двоичного поиска (C)? - PullRequest
0 голосов
/ 12 апреля 2020

Я должен прочитать список слов из файла. В верхней части этого файла находятся 3 числа, первое указывает, сколько имен из списка используется для создания BST, второе - сколько имен мне нужно прочитать из списка, а последнее - сколько имен мне нужно. удалить из списка.

Я прочитал из файла и создал BST, но я не могу понять, как сначала пропустить строки файла, чтобы получить имена, которые мне нужно найти и удалить, а затем выполнить их поиск. имена в BST. Я вполне уверен, что мне нужно открыть файл в главном, чтобы успешно передать открытый файл между функциями для чтения, поэтому я не постоянно запускаю начало в начале файла, но я продолжаю получать ошибки сегментации или неправильные ценности. Ниже приведена копия моей функции чтения файлов и текущий код, который я должен искать по словам.

struct tree_node* wordSearch(node* root, int s, int n, FILE *fptr){
int i;
char word[20];
int itemsBefore;

//Loop through i < n+s
for(i = n - 1; i < n+s; i++){
   fscanf(fptr, "%s", word);

   //If word is found
   if(strcmp(root->name, word) == 0){
     printf("%s: Found, number of nodes before: %d", root->name, itemsBefore);
     return root;
   } else if(strcmp(root->name, word) > 0){
     return wordSearch(root->right, s, n, fptr);
   } else if(strcmp(root->name, word) < 0){
     return wordSearch(root->left, s, n, fptr);
   } else {
     printf("%s: Not found, number of nodes before: 0", root->name);

   }
}

}

File Reader Ниже:

struct tree_node* fileRead(FILE *fptr, int *n, int *s, int *d){

//Declare looping variables
int i;

//Open in.txt
fptr = fopen("in2.txt", "r");

//Check if file is Open
if(!fptr){
    perror("Unable to open file\n");
    exit(1);
}

//Read first line into variables n, s, d in that order
fscanf(fptr, "%p %p %p", &n, &s, &d);

node *root;
node *newNode;
char word[20];
int nodeCounter;

//For each node under 'n', create a node and insert it into the tree
for(i = 0; i < n; i++){

    //If there are no nodes in the tree, create the first node named root
    if(nodeCounter == 0){

        fscanf(fptr, "%s", word);
        printf("Inserting: %s\n", word);
        root = create_node(word);

    //Else create a new node, fscanf a name into the data and insert it into the tree following root node
    } else {

        fscanf(fptr, "%s", word);
        printf("Inserting: %s\n", word);
        newNode = create_node(word);
        insert(root, newNode);
    }

    //Insert each new node

    nodeCounter++;
}
//fclose(fptr);
return root;

}

Наконец, ниже приведена копия фактического содержимого файла, из которого я читаю для контекста:

9 3 4 Джуди Мэри Билл Алиса Том Фред Джейн Джо Дейв Джейн Джонс Джуди Алиса Мэри Джуди Фред

...