Сортировка строк файла по алфавиту
Здравствуйте. Необходимо отсортировать считать строки из файла, отсортировать их по алфавиту с помощью шейкер-сортировки, и вывести на экран. Вот что я смог написать, проблема именно в том, что я не могу понять как сортировать строки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
#include #include #include int main(void) { char s[10][20]; char *p[10]; FILE *f; int i=1; int k=1; int m,N; char *buf; f = fopen ("input.txt", "r"); while (!feof(f)) { fscanf (f, "%s", s); i++; *p[i]=s[i][0]; } fclose (f); do { N = 0; for(m=10; m > 0; --m) { if(strcmp(p[m-1],p[m])>0) { buf = p[m]; p[m-1] = p[m]; p[m] = buf; N = 1; } } for(m=1; m 10; ++m) { if (strcmp(p[m-1],p[m])>0) { buf = p[m-1]; p[m-1] = p[m]; p[m] = buf; N = 1; } } } while(N); for (k=0; ki; k++) { printf ("\t\t %s \n", p[k]); } }
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Сортировка по алфавиту (запись и чтения строк из файла на диске D)
Не получается сортировка по алфавиту (запись и чтения строк из файла на диске D). Для книг.
Ввод из файла набора слов и его сортировка по алфавиту
В принципе работает, но этот код просто ужасный. Подскажите, пожалуйста, как работать с вводом.
Сортировка строк из файла
Доброго времени суток. Программа сортирует, но выводит не так как хочется, см. миниатюру. .
155 / 102 / 12
Регистрация: 22.07.2010
Сообщений: 445

Сообщение было отмечено как решение
Решение
Считывание из файла строк в массив
1 2 3 4 5 6 7 8 9 10 11 12
char strings[10][32], str[32]; FILE *f; int count = 0; if((f = fopen ("input.txt", "r") == NULL){ return 1; } while (feof(f) == 0 || count > 10) { fscanf (f, "%s", str); strcpy(strings[count++], str); } fclose (f);
Добавлено через 18 минут
Сортировка методом пузырька:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
#include #include #include int main(void) { char strings[10][32], str[32]; FILE *f; int count = 0, i, j; if((f = fopen ("input.txt", "r")) == NULL){ return 1; } /* Считываем слова из файла */ while (feof(f) == 0 || count > 10) { fscanf (f, "%s", str); strcpy(strings[count++], str); } fclose(f); /* Выводим считаные строки */ for(i = 0; i count; i++) printf("%s\n", strings[i]); putchar('\n'); /* Сортировка методом пузырька */ for(i = 1; i count; i++) for(j = 0; j count - i; j++) if(strcmp(strings[j], strings[j+1]) > 0){ strcpy(str, strings[j]); strcpy(strings[j], strings[j+1]); strcpy(strings[j+1], str); } /* Выводим отсортированные строки */ for(i = 0; i count; i++) printf("%s\n", strings[i]); getch(); return 0; }
Как отсортировать строки в алфавитном порядке в СИ?

Вот задание, которое я делаю:
Вот программа, которую я написал на данный момент:
#include #include #include struct price< char name[30]; char shop[30]; char product_price[10]; >; int main() < struct price product[8]; char check[30]; int i, compare_limit = 30; char memory[30]; //Ввод информации в структуру с товарами for( i = 0; i < 2; i++ )< printf("Enter product %d NAME:\n", i); fgets( product[i].name, 30, stdin ); /*printf("Enter product %d SHOP:\n", i); fgets( product[i].shop, 30, stdin ); printf("Enter product %d PRICE:\n", i); fgets( product[i].product_price, 10, stdin );*/ >for( i = 0; i < 2; i++)< if(product[i+1].name >product[i].name) < strcpy(memory, product[i].name); strcpy(product[i].name, product[i+1].name); strcpy(product[i+1].name, memory); >> for( i = 0; i < 2; i++ )< printf("%s\n", product[i].name); >//Вывод информации о товаре по его имени while ( 1 ) < printf("You can get information about any product by enter it's name:\n"); fgets( check, 30, stdin ); for( i = 0; i < 2; i++ )< if( strncmp(check, product[i].name, compare_limit) == 0 )< printf("Product %d NAME is: %s", i, product[i].name); printf("Product %d SHOP is: %s", i, product[i].shop); printf("Product %d PRICE is: %s", i, product[i].product_price); >> > return 0; >
Вроде-бы я всё реализовал (скорее всего не очень грамотно), кроме сортировки записей в алфавитном порядке. Я не знаю, правильно ли я сравниваю строки и какой принцип сравнения у них вообще (А > a, б < а, Б >a). подскажите пожалуйста, как всё это работает и как мне отсортировать строки?
- Вопрос задан более трёх лет назад
- 5948 просмотров
2 комментария
Оценить 2 комментария
Сортировка слов по алфавиту СИ
Всё очень просто. Используем стандартную С-шную функцию qsort:
ОПИСАНИЕ Функция qsort() сортирует массив из nmemb размером size. Аргумент base указывает на начало массива.
Содержимое массива сортируется в соответствии с функцией сравнения, на которую ссылается compar, вызываемой вместе с двумя аргументами, которые ссылаются на сравниваемые объекты. Функция сравнения должна вернуть целое, меньшее, равное и большее нуля для случаев, когда первый аргумент меньше, равен или больше второго соответственно. Если оба элемента сравнения равны, порядок их сортировки в массиве не будет определен.
Вам даже не надо писать функцию сравнения — в стандартной библиотеке С уже есть функция сравнения строк:
Функция strcmp() сравнивает строки s1 и s2. При этом локаль не учитывается (для её учёта используйте функцию strcoll(3)). Она возвращает целое число, которое меньше, больше нуля или равно ему, если выяснится, что s1 меньше, равна или больше s2 соответственно.
Как отсортировать строку по алфавиту c
Условие: Дана строка слов разделенных запятыми, в конце строки точка.
Задача: Вывести на экран все слова остортированные в алфавитном порядке. (кириллицу можно не использовать)
Я знаю что можно как-то использовать функцию strcmp () но никак не могу разобраться как.
Вот мой вариант кода, но мне кажеться сильно замудренный от того и запутался наверное.
#include #include #include using namespace std; void filter(char *string, int n, int x, char **new_str) < for (int i=0, j=0;ielse < j++; continue; >> void main () < char *string = new char [100]; int x=0,n=0,y=0; gets(string); n = strlen (string); for (int i=0;ichar **new_str = new char* [x]; for (int i = 0; i filter (string,n,x,new_str); for (int i=0;i delete [] string; for (int i=0;i delete [] new_str; >
Прошу помочь с решением, если можно с небольшими комментариями для понимания.