Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2008, 10:08   #1
mmka
Пользователь
 
Регистрация: 15.11.2008
Сообщений: 11
Вопрос Сортировка строчек из txt файла

Есть файл results.txt
в нем содержание в формате:
Цитата:
asdasdada asdadaslklask 231 23 34
asdolujkfldk sjk 213 543 12
alsdklfj asdkl 23 43 123
akjllsad ihakjh 2321 32 21 ;
то есть первые две позиции - текст (англ), остальные три - числа.
в конце файла через пробел (или \n и пробел стоит ; которая обозначает конец)

Так вот надо отсортировать по 1 столбцу (алфавит), по 2 столбцу (алфавит), и по остальным трем столбцам (выбирается самое большое число и сортируется относительно его (то есть сверху - строчка у которой одно из чисел самое большое)

80 процентов программы сделал (заключалась в редактировании файла, добавлении, удалении и еще куча всего)
А вот здесь вот загвозка... ничего в голову не приходит. Знаком с C++ неделю, приходится, так вот...

Ах да, запись в файл не обязательна, можно просто выводить, пишу в C++ Builder 6 , консоль
Help! (а то приходится сдавать переводные экзамены... в итоге за неделю надо учить с++ народ 2 семестра его учил а мне за неделю( )

если кому надо исходники - выложу.
Если какие-т библиотеки специальный надо подключить - легко. Ограничения в задании по этому нету...

Последний раз редактировалось mmka; 24.11.2008 в 14:02.
mmka вне форума Ответить с цитированием
Старый 24.11.2008, 12:07   #2
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Тебе подойдет алгоритм, который называется Schwartzian transform:
http://en.wikipedia.org/wiki/Schwartzian_transform
como вне форума Ответить с цитированием
Старый 24.11.2008, 12:26   #3
mmka
Пользователь
 
Регистрация: 15.11.2008
Сообщений: 11
По умолчанию

Цитата:
Тебе подойдет алгоритм, который называется Schwartzian transform:
http://en.wikipedia.org/wiki/Schwartzian_transform
К сожалению не до конца понял... там ведь perl?! А мне вроде си++ нужен...

Приведите примеры пожалуйста...
mmka вне форума Ответить с цитированием
Старый 24.11.2008, 12:33   #4
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от mmka Посмотреть сообщение
К сожалению не до конца понял... там ведь perl?! А мне вроде си++ нужен...

Приведите примеры пожалуйста...
Там объяснен алгоритм. Перл-шмерл. Язык программирования не важен. Суть в том, что допустим у тебя есть массив строк. Ты превращаешь его в массив структур, со следующими элементами:
1. первоначальная строка
2. первое слово
3. второе слово
4. третье слово, и т.д. сколько слов тебе надо.

Потом сортируешь массив этих структур стабильной сортировкой (std::stable_sort, не изменяющей порядок следования одинаковых элементов) сначала по последнему слову, потом по предпоследнему, и т.д. до первого.

Когда сортировка закончена, ты превращаешь массив структур обратно в массив строк.
como вне форума Ответить с цитированием
Старый 24.11.2008, 12:35   #5
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
По умолчанию

Что то я не совсем понял задание...
Нужно отсортировать 1 столбец, 2 столбец и 3 столбец = 3 поля int???
Так?! Они как нибудь зависят друг от друга то?!?!?
StarWorm вне форума Ответить с цитированием
Старый 24.11.2008, 12:46   #6
mmka
Пользователь
 
Регистрация: 15.11.2008
Сообщений: 11
По умолчанию

Цитата:
Там объяснен алгоритм. Перл-шмерл. Язык программирования не важен. Суть в том, что допустим у тебя есть массив строк. Ты превращаешь его в массив структур, со следующими элементами:
1. первоначальная строка
2. первое слово
3. второе слово
4. третье слово, и т.д. сколько слов тебе надо.

Потом сортируешь массив этих структур стабильной сортировкой (std::stable_sort, не изменяющей порядок следования одинаковых элементов) сначала по последнему слову, потом по предпоследнему, и т.д. до первого.
Когда сортировка закончена, ты превращаешь массив структур обратно в массив строк.
капеец( мне еще надо ведь массив сторк получить

Цитата:
Что то я не совсем понял задание...
Нужно отсортировать 1 столбец, 2 столбец и 3 столбец = 3 поля int???
Так?! Они как нибудь зависят друг от друга то?!?!?
Нужно отсортировать строчки
а) по 1 столбцу (в алфавитном порядке)
б) по 2 столбцу (в алфавитном порядке)
в) по 3,4,5 столбцу (самое большое число среди них)
Они никак друг от друга не зависят. Их вводит человек.

теоритически вот так:
Цитата:
текст текст число число число
текст текст число число число
текст текст число число число
текст текст число число число
текст текст число число число ;
Сортировать по 1 столбцу, второму.
Причем это все в текстовом файле...

Последний раз редактировалось mmka; 24.11.2008 в 12:49.
mmka вне форума Ответить с цитированием
Старый 24.11.2008, 12:52   #7
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
Плохо

Цитата:
Сообщение от mmka Посмотреть сообщение
капеец( мне еще надо ведь массив сторк получить
У тебя проблемы с считыванием файла в массив строк? Тогда извени.
como вне форума Ответить с цитированием
Старый 24.11.2008, 13:19   #8
mmka
Пользователь
 
Регистрация: 15.11.2008
Сообщений: 11
По умолчанию

Цитата:
У тебя проблемы с считыванием файла в массив строк? Тогда извени
там проблема со считывание \n то есть перехода строки(
а алгоритм я так и не понял(
mmka вне форума Ответить с цитированием
Старый 24.11.2008, 13:28   #9
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от mmka Посмотреть сообщение
там проблема со считывание \n то есть перехода строки(
навскидку (\n отбрасывается функцией getline):
Код:
vector<string> text_lines;
ifstream in("myfile.txt");

while (in)
{
    string line;
    getline(in, line);
    text_lines.push_back(line);
}
Цитата:
Сообщение от mmka Посмотреть сообщение
а алгоритм я так и не понял(
не все сразу
como вне форума Ответить с цитированием
Старый 24.11.2008, 13:42   #10
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
По умолчанию

Кароч... Я бы заполнял так...
Либо массив структур... Либо три двумерных массива:
два char** и один int** Сортировка бы заключалась в том, что менять указатели!!! А потом обратно в файл это все запихать (после сортировки)!!!
StarWorm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как ускорить загрузку списка ListBox из txt-файла? Dux Компоненты Delphi 24 30.10.2008 19:02
Сформировать список строк L1, считав его из файла input.txt Gaika Помощь студентам 4 03.07.2008 07:33
Запись из файла txt или mdb в базу данных DerSky БД в Delphi 6 09.06.2008 12:50
Разделение txt файла на несколько htm Tiger16 Фриланс 3 17.04.2008 22:40
как считать данные с Txt файла? Alar Общие вопросы Delphi 0 29.10.2006 20:12