![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
ninja |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Добрый вечер, необходимо написать программу которая сортирует строки в файле в алфавитном порядке.
Код программы: laba3::sortirovka() Язык С++. Идея сортировки такая, берется первое слово и сранивается со всеми, затем если нужно слова переставляются, и цикл начинается заново и так пока не достигнется конец файла, затем берется 2е слово и сранивается с отсальными и т.д. Писал программу, но запутался с функцией fseek(); т.е 1е слово со всеми сравнивается, а вот чтобы взять затем 2е не получается. И 2я проблема есть ли какая-нибудь функция удаления и смещения символов в файле, т.е например если в файле 2 строки klmno и abc то при перестановке получается abcno klmno. Заранее благодарен за помощь. |
![]() ![]() |
ninja |
![]()
Сообщение
#2
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
В 1м посте я писал программу на консольном С++. а класс я сам объявлял.
Я впринцыпе нашел программу реализующую сортировку, но разрбраться пока сложновато, если Вам не трудно можете добавить коментарии к строкам, примерно представляю как она работает, но не до конца, как я понял тут сначала загружается все строки в динамическую память, затем сортируются, если ошибаюсь поправте. И еще такой вопрос что означает символ ' * ' это ссылка на область памяти? т.е это равносильно паскалевсому '^' ? и если пишут несколько ** как это понять? Спасибо за помощь. scmp(const void *p1, const void *p2) { const char *s1, *s2; s1 = * (char **) p1; s2 = * (char **) p2; return strcmp(s1, s2); } laba3::sortirovka() { FILE *ifp, *ofp; laba3 l; char *lineptr[MAXLINE]; char s[MAXLINE]; int i, nl; clrscr(); ifp = fopen(IFNAME, "r"); if(ifp == NULL || (ofp = fopen(OFNAME, "w")) == NULL) { perror("fopen"); return -1; } for(i = 0; i < MAXLINE; ) { if(fgets(s, sizeof(s), ifp) == NULL) break; if(*s != '\n') lineptr[i++] = strdup(s); } nl = i; qsort(lineptr, nl, sizeof(char *), scmp); for(i = 0; i < nl; i++) { fprintf(ofp, "%s", lineptr[i]); free(lineptr[i]); //fputc('\n',ofp); } fclose(ifp); fclose(ofp); cout << "file otsortirovan"; getch(); return 0; } |
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 11:20 |