Как отсортировать строки файла в c, посмотрев один из атрибутов в строке? - PullRequest
2 голосов
/ 22 апреля 2020

В моем примере одна строка содержит 8 атрибутов (в виде строк и целых чисел), разделенных запятыми (,). Я разделяю эти атрибуты в соответствии с запятыми, и у меня есть условие: напечатать строки в файле, которые имеют одно и то же название страны (один из атрибутов), с вводом, введенным пользователем. Итак, я написал это используя strcasecmp (для сравнения двух строк без учета регистра):

if (strcasecmp(enteredCountryName, CountryNameInTheFile) == 0) {
    fputs(line, outpufile);
}

Но я хочу поместить строки в выходной файл в возрастающем алфавитном порядке c из-за названий городов, которые являются другим атрибутом , Я всегда видел похожие примеры на Inte rnet, например:

for (i = 0; i < n - 1; i++) {
    for (j = i + 1; j < n; j++) {
        if (strcmp(name[i], name[j]) > 0) {
            strcpy(temp, name[i]);
            strcpy(name[i], name[j]);
            strcpy(name[j], temp);
        }
    }
}

Но я не мог адаптировать их к своему коду, так как я новый ученик. Можете ли вы показать мне, как я могу это адаптировать? Или, если у вас есть другое предложение для сортировки в соответствии с условием, которое я сказал, я хотел бы услышать это. Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Ваша программа должна сначала запросить у пользователя название страны и прочитать эту строку в массив с fgets() или scanf(), используя правильный формат преобразования в зависимости от того, есть ли пробелы в имени или нет. Если вы используете fgets(), убедитесь, что вы удалили завершающий символ новой строки.

Затем программа откроет файл и прочитает строки по одной за раз.

Вы найдете поле и его длину с помощью strchr().

Вы сравниваете значение поля с пользовательским вводом, игнорируя регистр. Не используйте strcasestr() для этого, потому что это нестандартно и потребует нулевого завершения поля. Вместо этого используйте al oop и сравните символы, используя tolower(), чтобы игнорировать регистр.

Если поле совпадает, сначала выведите строку.

Как только ваша программа ведет себя правильно, вы Можно выполнить сортировку, сохранив копии строк в массиве строк и отсортировав их с помощью qsort(), а затем напечатайте строки из массива.

0 голосов
/ 22 апреля 2020

В c самый простой способ сортировки чего-либо - использование встроенной функции qsort и предоставление компаратора для элементов, которые необходимо отсортировать.

Определение функции можно увидеть ( с примерами) онлайн здесь - https://en.cppreference.com/w/c/algorithm/qsort

Для вашего кода опция сортировки будет выглядеть примерно так:

qsort(name, n, strcmp)

, тогда вы можете использовать любой способ, какой захотите запишите их в свой файл.

...