Как прочитать файл, который содержит два столбца и отсортировать первые номера столбцов в порядке возрастания и распечатать их с соответствующими значениями 2-го столбца с помощью C?Порядок сортировки чисел в порядке возрастания
-4
A
ответ
0
fopen
открывает файл.
fscanf
считывает из файла и разбивает то, что считывается в биты согласно спецификации формата (например, "%d %s"
означает целое число, за которым следует пробел, за которым следует строка символов без пробелов).
qsort
- это стандартная функция библиотеки, которая будет сортировать массив. Он сортирует массив, сравнивая один элемент с другим элементом. Вы даете ему имя функции (которую вы пишете), которая делает это сравнение.
Я рекомендую вам прочитать страницы руководства для этих функций, если вы не знакомы с ними.
ниже Программа использует все это:
- Открыть файл
test.txt
- прочитанной строка из файла в массив
arr
- Сортировки массив с помощью
qsort
, используя функцию rowcmp (rowcmp выглядит при числовом значении в первом столбце, чтобы определить, является ли один элемент больше, равным или меньшим, чем другой элемент) - Распечатайте элементы массива.
Код ...
#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 100
#define MAXITEMS 100
// A row has two columns, the first is a number and
// the second is any string of up to MAXLEN chars
struct row {
int col1;
char col2[MAXLEN];
};
// Function to do comparison of rows
// Sorts numerically on the value in the first column
int rowcmp(struct row * r1, struct row * r2) {
if (r1->col1 < r2->col1) return -1;
if (r1->col1 == r2->col1) return 0;
return 1;
}
int main(int argc, char ** argv) {
struct row arr[MAXITEMS]; // up to MAXITEMS rows
int rows = 0, i;
FILE * stream = fopen("test.txt", "r");
// Read in rows and put first and second columns into struct,
// building up an array
while (fscanf(stream, "%d %s", &(arr[rows].col1), arr[rows].col2) !=EOF) {
rows++;
}
// Sort the array using the rowcmp function to compare items
qsort(&arr[0], rows, sizeof(struct row), (__compar_fn_t)rowcmp);
fclose(stream);
// Print the sorted array
for (i=0; i<rows; i++) {
printf("%d\t%s\n", arr[i].col1, arr[i].col2);
}
}
С входного файла:
1 apple
3 cucumbers
21 dates
7 figs
4 grapes
выход
1 apple
3 cucumbers
4 grapes
7 figs
21 dates
Смежные вопросы
- 1. сортировки чисел в порядке возрастания по линии
- 2. Сортировка чисел в порядке возрастания
- 3. сортировки файлов Ouput в порядке возрастания
- 4. Сортировка сортировки в порядке возрастания массива
- 5. Как сортировать массив чисел в порядке возрастания
- 6. Генератор случайных чисел для вывода чисел в порядке возрастания
- 7. Сортировка Datalist в порядке возрастания
- 8. Сортировка массиваList в порядке возрастания и убывания
- 9. Сортировка ArrayList в порядке возрастания
- 10. Функция сортировки в диапазоне дат для транспонирования в порядке возрастания
- 11. Сортировки недвижимость в объекте в порядке возрастания Angularjs/Javascript
- 12. LINQ или Ламба для сортировки массива целых чисел в порядке возрастания в наборе частоты их повторения
- 13. Сортировка целого числа в порядке возрастания - Java
- 14. Java и Массивы - Вставка сортировки в порядке возрастания
- 15. C++ Сортировка чисел в порядке возрастания в текстовом файле
- 16. Как создать подпроцедуру для сортировки чисел в порядке возрастания? - Консоль VB
- 17. Отображение трех неотрицательных целых чисел в порядке возрастания
- 18. k-комбинации набора целых чисел в порядке возрастания размера
- 19. Pairwise сумма п чисел в порядке возрастания, не
- 20. Сортировка списка целых чисел в порядке возрастания - C
- 21. Отчет SSRS Пользовательский порядок сортировки
- 22. отображать буквы в порядке возрастания в java
- 23. Порядок сортировки отсортированных списков vb.net не в правильном порядке
- 24. Сортировка файла в порядке возрастания
- 25. сортировать arraylist в порядке возрастания
- 26. векторные элементы в порядке возрастания
- 27. формирование даты в порядке возрастания
- 28. размещение номеров в порядке возрастания
- 29. Список адресов в порядке возрастания
- 30. Сортировка массива в порядке возрастания
Добро пожаловать на переполнение стека. Ваш вопрос будет лучше принят, если вы будете следовать рекомендациям, которые представлены вам в разделе «Как спросить» справа, когда вы задаете вопрос. http://stackoverflow.com/help – GreenAsJade
Чтобы начать работу, сначала прочитайте строку из файла (см. 'scanf',' fgets' или 'getline') и сохраните их в структуре данных (массив указателей на char будет работать). Затем работайте над разбором первого столбца во что-то, что можно сортировать (возможно, массив). Затем сортируйте по первому столбцу, применяя результаты к вашему массиву указателей. Поработайте над этим, объедините свой код вместе с образцами данных и обновите свой вопрос. Это послужит основой для помощи. –
использовать сортировку или использовать awk или perl. – BLUEPIXY