![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
ninja |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Добрый вечер, необходимо написать программу которая сортирует строки в файле в алфавитном порядке.
Код программы: laba3::sortirovka() Язык С++. Идея сортировки такая, берется первое слово и сранивается со всеми, затем если нужно слова переставляются, и цикл начинается заново и так пока не достигнется конец файла, затем берется 2е слово и сранивается с отсальными и т.д. Писал программу, но запутался с функцией fseek(); т.е 1е слово со всеми сравнивается, а вот чтобы взять затем 2е не получается. И 2я проблема есть ли какая-нибудь функция удаления и смещения символов в файле, т.е например если в файле 2 строки klmno и abc то при перестановке получается abcno klmno. Заранее благодарен за помощь. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Брррр... А что, сортировку обязательно написать самому, воспользоваться тем, что есть уже готовое в языке (если уж речь про С++ - то там это точео есть) - нельзя?
|
ninja |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Конечно можно, так даже будет удобней, я недавно начал си изучать, подскажите есть ли метод какой, или функция?
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Ты пример файла приведи, с которым работаешь...
|
ninja |
![]()
Сообщение
#5
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Пример файла
sdfsdfsdfsdfsf fwfsdfsdf sdfwefs sdfwefwefwef erwerwer |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
#include <algorithm> |
ninja |
![]()
Сообщение
#7
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Добрый день, Владимир спасибо огромное только это ведь язык С, если не ошибаюсь? А мне нужно на C++
|
TarasBer |
![]()
Сообщение
#8
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вы путаете C и С++. Вам нужен просто C (судя по 1му посту), а решение вам привели на C++. Неужели не видно, что раз есть навороты типа std::vector<std::string>, значит, это "плюсы"?
-------------------- |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата Вам нужен просто C (судя по 1му посту) Ага... Особенно - судя вот по этой части первого поста:Цитата laba3::sortirovka() |
ninja |
![]()
Сообщение
#10
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 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; } |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата В 1м посте я писал программу на консольном С++. а класс я сам объявлял. Ты для себя сначала реши, ты хочешь С или С++? Потому как та гремучая смесь, что есть у тебя сейчас - это ни то ни другое. Чистый С - значит без классов, с использованием вот этих многоэтажных *** и приведений типов (иногда безопасных, иногда - не очень). Если С++ - то классы, использование потоков вместо файлов, и использование стандартной библиотеки (STL).Тот код, который ты привел - вообще не будет компилироваться ни одним из современных С++ компиляторов (без внесения исправлений). |
TarasBer |
![]()
Сообщение
#12
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ага... Особенно - судя вот по этой части первого поста: , правда? Ну прям вылитый С. С классами только с какого-то перепуга... Всё, кроме первой строчки - чистый C вообще-то, а что? Цитата и если пишут несколько ** как это понять? Ну * это не обязательно просто указатель. Иногда это указатель на массив, иногда это строка, иногда это просто способ передать параметр по ссылке. Например в фразе proc(char *** c) тройная звёздочка может просто означать массив строк, переданный по ссылке. В коде сортировки (char **) - это указатель на строку. -------------------- |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата Всё, кроме первой строчки - чистый C вообще-то "- Осетрину прислали второй свежести, - сообщил буфетчик. - Голубчик, это вздор! - Чего вздор? - Вторая свежесть - вот что вздор! Свежесть бывает только одна - первая, она же последняя. А если осетрина второй свежести, то это означает, что она тухлая!" (С) М.А. Булгаков, "Мастер и Маргарита" Применительно к специфике форума - перефразирую: А как компилятору-то объяснить, чтоб он первую строку воспринимал, как С++, а остальные - как С? Или, пардон, программа должна быть написана, а будет она компилироваться и работать - это уж не особо важно? Так вот, рассказываю: программа из первого поста не будет компилироваться как С++ (причины - тривиальны: не иметь возвращаемого значения может только конструктор, все остальные методы его обязаны иметь; и небезопасное сравнение знаковых/беззнаковых типов, которое трактуется как ошибка) так и Plain C - компилятором (ибо ни неймспейсов ни классов в чистом С нет). |
ninja |
![]()
Сообщение
#14
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Программа вроде работает, я просто путаюсь с С и С++, точнее даже не знаю в чем отличия, смотрю вроде код похожий беру и использую если работает, то хорошо, сейчас просто сессия надо быстрей сдавать времени нету, поэтому абы как и делаю.... Летом буду разбираться что да как, Спасибо за помощь.
Вот сама программа: ![]() |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 8:33 |