Как я могу отсортировать записи в текстовом файле в C? - PullRequest
0 голосов
/ 29 августа 2018

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

Итак, у меня есть, например:

User three; Test three; 30
User one; Test; 51
User two; Test two; 40

Программа должна отсортировать эти записи по номеру в конце, поэтому должно быть:

User one; Test; 51
User two; Test two; 40
User three; Test three; 30

Это мое текущее усилие, в основном я создал переменную char one, которая будет хранить данные, полученные из fgets, и распечатывать их. Две проблемы: char one имеет фиксированную переменную (255), поэтому, если запись будет длиннее 255, возникнет ошибка.

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

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

int main() {

    char one[255];

    FILE * fpointer = fopen("record.txt", "r");

    while (!feof (fpointer) ) {
    fgets(one, 255, fpointer);
    printf("%s", one);
    }

    fclose(fpointer);
    return 0;

}

1 Ответ

0 голосов
/ 29 августа 2018

Вместо пузыря вы можете перейти на сортировку вставок. Во-первых, просканируйте весь файл и сохраните каждое поле строки в массиве (для этого вы можете использовать fscanf()). Например, массив user, в котором хранятся значения User Three;, User Two;, User One;, еще один, в котором хранится Test, и аналогично для третьего поля. После получения массивов, содержащих содержимое файла, вы можете легко реализовать сортировку вставкой в ​​последнем поле и, соответственно, отсортировать все массивы, а затем записать их обратно в исходный или другой файл. Если вам нужна помощь с сортировкой вставок, вы можете проверить это . Для сравнения строк используйте strcmp()

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: для сканирования каждой строки в массиве 3 сделать что-то вроде:

fscanf("%s%s%s", &user[i], &test[i], &num[i], fpointer);

запустите это внутри операции чтения файла цикла и файла, и вы получите все данные в массивах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...