| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Сортировка строк по алфавиту. Структуры. |
| Автор: Kruger2 14.7.2011, 16:48 | ||||||
| Известная задача, в интернете есть много вариантов, но я не могу нормально реализовать сортировку по алфавиту. Вот условие: 1. Описать структуру с именем ТRAIN, содержащую следующие поля: • NAZN - название пункта назначения; • NUMR - номер поезда; • ТIМЕ - время отправления. 2. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив RASР, состоящий из восьми элемен¬тов типа ТRAIN; записи должны быть размещены в алфавитном порядке по названиям пунктов назначения; • вывод на экран информации о поездах, отправляющихся после введенного с клавиатуры времени; • если таких поездов нет, выдать на дисплей соответствующее сообщение. Вот задача:
Каким образом создать сортировку? Допустим будут строки: London Astana Moscow Kiev Надо раскидать их по алфавиту, от а к z. Если рассматривать как двумерный массив, то мне необходимо сравнивать первый элемент 1ой строки с первым элементов 2ой , если он больше, то поднять вверх всю строку и т.д. Но у меня массив NAZN(название города) объявлен как одномерный. У меня вообще нет тут двумерного массива, что бы попробовать пузырьковою конструкцию типа:
Или в этом случае я зафиксировал вообще нулевой элемент и надо вот так? Но всё равно у меня нет двухмерного массива и я не могу сравнивать именно нулевой элемент каждой строки ((
|
| Автор: boostcoder 14.7.2011, 16:53 |
| юзай std::vector и std::sort |
| Автор: Kruger2 14.7.2011, 16:54 |
| boostcoder, Находил такие примеры, но я как бы не должен их ещё знать на этой стадии, хотя в общих чертах понимаю как работают они Добавлено через 1 минуту и 18 секунд Хотя нет, вектор не знаю вообще) |
| Автор: boostcoder 14.7.2011, 16:59 |
| используй http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/. это Си-функция для сортировки. |
| Автор: Kruger2 14.7.2011, 17:01 |
| Да, только по программе эта задача идет перед функциями и тем более перед указателями |
| Автор: boostcoder 14.7.2011, 17:14 |
вариантов куча. но это руками все писать придется... |
| Автор: Kruger2 14.7.2011, 17:15 | ||
Тут сортировка происходит в зависимости от номера поезда:
33 22 44 11 Не совсем понимаю каким образом тут происходит сортировка. Получается, i=строки, j= столбцы? Тогда каким образом строка сравнивается со столбцом О_о Добавлено через 27 секунд boostcoder, Пичалька |
| Автор: borisbn 14.7.2011, 17:57 | ||
| Kruger2, в твоём одномерном массиве нет ни столбцов ни строк. Есть просто индекс. Для лучшего понимания распечатай каждый шаг алгоритма (все переменные):
|
| Автор: Kruger2 14.7.2011, 18:03 | ||
Наплевал на всё и сделал как вы и советовали, boostcoder, через strcmp. Никто ведь не запрещает мне наперед учиться? Буду так и говорить
|
| Автор: boostcoder 14.7.2011, 18:03 |
| Kruger2, малаца! |
| Автор: borisbn 14.7.2011, 18:05 |
| Kruger2, вот, посмотри http://forum.vingrad.ru/forum/topic-37776/anchor-entry285335/15.html. Только не бездумно копипасть, а внимательно разбери... Плюс можешь повставлять отладочный вывод, как я тебе показал выше... |
| Автор: Kruger2 14.7.2011, 18:08 |
| borisbn, Спасибо, надо убегать, позже обязательно разберу. boostcoder, Тоже спасибо за наводку. Нафлужу ещё пару постов и расставлю плюсы всем |
| Автор: fish9370 16.7.2011, 10:16 | ||
вобще, strcmp реализуется довольно легко, не обязательно использовать библиотечную:
|
| Автор: fish9370 16.7.2011, 15:57 |
| volatile, не нравишься ты мне |
| Автор: boostcoder 16.7.2011, 16:01 |
| я конечно ничего против Си не имею... но когда видишь такой код от сишника, начинаешь задумываться...таки не плюсы виноваты. |
| Автор: fish9370 16.7.2011, 16:14 |
код я уже исправил, только не надо делать вид, что вы все никогда не ошибаетесь.. вместо того чтобы сказать, что в коде есть ошибки, типа исправь, он включает высокомерие (это я о предыдущем постере) |
| Автор: boostcoder 16.7.2011, 16:16 |
все ошибаются. смысл в другом... |
| Автор: fish9370 16.7.2011, 16:17 |
а в чем? |
| Автор: borisbn 16.7.2011, 16:43 | ||
http://www.progz.ru/t134/ (1-й анекдот) fish9370, вместо того, чтобы спасибо сказать не нравится - не ешь |
| Автор: fish9370 16.7.2011, 16:52 |
сказал бы, если бы он не был таким |
| Автор: volatile 16.7.2011, 17:04 | ||||
И после исправления в коде есть грубые ошибки! fish9370, типа исправь, может с 3-раза получится.. |
| Автор: fish9370 16.7.2011, 17:24 |
присвети меня мистер |
| Автор: Dov 16.7.2011, 17:47 | ||
|
| Автор: volatile 16.7.2011, 17:52 | ||
да пожалуйста, только дело не в постфиксном инкрименте, а в том что строки теперь никогда не будут равны.
Здесь никогда не дойдет до return 0; !!! |
| Автор: fish9370 16.7.2011, 17:57 |
да вы что? а это почему? |
| Автор: volatile 16.7.2011, 18:01 |
| fish9370, А хотя да. сорри. |
| Автор: fish9370 16.7.2011, 18:03 |
| мистер не переживай, я не буду над тобой глумиться.. |
| Автор: volatile 16.7.2011, 18:04 | ||
Dov, неплохо, только надо сделать что-то типа return sign(*s1 - *s2); |
| Автор: fish9370 16.7.2011, 18:05 |
| Dov, классный код, но как же проверки на NULL? |
| Автор: volatile 16.7.2011, 18:13 |
fish9370, я не хотел не над кем глумиться. Я просто хотел сказать что изобретать велосипед дело не хорошее. Если я вас чем-то обидел, прошу прещения. Библиотеки создавали не лохи. И не к чему изобретать его снова и снова. Можно нарваться на большие неприятности. |
| Автор: boostcoder 16.7.2011, 18:15 |
| volatile, истину говоришь! |
| Автор: fish9370 16.7.2011, 18:27 |
так и я за то.. стал бы я переписывать эту функцию.. просто топикстартеру, как я понял, запрещают использовать стандартные функции, в учебных целях.. что на том этапе считаю правильным, как раз время для велосипедов.. что библиотеки создают не лохи, это правда, но часто стандартные функции оборачивают в обертки.. я за мирный диалог, мне хочется делать ошибки и чтобы за это меня в дерьмо лицом не тыкали, так надоело мериться пиписьками.. |
| Автор: Dov 16.7.2011, 18:38 | ||
извиняюсь, недопонял... Ну это это же просто пример, а не рабочий вариант. Кому надо, пусть проверяет. |
| Автор: JackYF 18.7.2011, 22:04 | ||
|
| Автор: Masha7 19.7.2011, 13:09 |
| просто примени qsort(). это Си-функция для четкой сортировки. ________________________________________________________________________________________ http://www.avtostrahovanie-russia.ru/http://www.biznes-hroniki.ru/http://www.dorogi-rossii.ru/http://www.stroinay.ru/http://www.tehnoblogger.ru/http://www.neotext09.ru/http://www.h20-serial.ru/http://www.xponika.info/http://www.marketing-blogs.ru/http://mobiletelefons.ru/http://www.greek-serial.ru/http://www.glomerulonefritanet.ru/ |