C++ string Сортировка строк без векторов, мультисетов и без всего подобного

Предлагаю вашему вниманию решение одной из задач: сортировка строк, когда вводится неопределенное число строк.
Показываемый код демонстрируется желающим решить эту задачу без stl. Сколько строк будет заранее неизвестно.
Мной будет задействован тип std::string из заголовочного файла <string> Этот тип возможно использовать в компиляторах, которые поддерживают stl. В совсем старых компиляторах этого типа нет.

Что такое скомпилированная строка? В этом материале под этот термин попадает такая строка, которая собрана из нескольких строк. Просто к каждой строке добавляется некоторый разделитель. В моем случае этот разделитель есть символ '/n'. После добавления очередного разделителя строка склеивается со следующей строкой, считанной с клавиатуры. Таким образом получается одна строка, содержащая много таких разделителей.
Если говорить коротко, то: "из множества получаемых строк делаем только одну строку.".
Зачем это надо? Это надо, чтобы написать программу, которая будет считывать неизвестное заранее число строк. Если бы было известно, то можно бы было предложить ввести количество строк и вводить известное число строк, но вот неизвестно нам это количество и всё. Это ограничение неизвестности я и обхожу таким путем.
Так как происходила склейка разных строк, то нужно предусмотреть расклеивание такой одной строки во много строк. Такое расклеивание эффектнее если указывать номер строки и получать непосредственно ту строчку, которая была введена под этим номером. В общем, нужно научить программу вытаскивать правильную строчку.
Чтобы понять функцию с вытаскиванием, нужно хорошо ориентироваться во вложенных циклах. В примере всего один вложен в другой, поэтому если не понимаете, то я даже не знаю как еще разжевать.
Есть разделитель, который мы впихивали в компилируемую строчку. Есть номер строчки. Согласно этому номеру строчки, разделитель несколько раз пропускается в цикле, и если известно, что текущее выполнение цикла предпоследнее, то тогда начинаем собирать строчку, которая и будет строкой, взятой по номеру. Вот и весь алгоритм.
Функция сортировки строк, используемая в показанном коде, — это обычная пузырьковая сортировка. Вы уже должны быть знакомы с ней и нужно уметь её писать, ибо она очень проста и легка к запоминанию.
Единственное, что, по-моему, может быть непонятно, это c_str(). Этот c_str() используют, чтобы получить СИ-строку. Это для перевода объекта, тип которого std::string в тип const char*

Нужно это, чтобы можно было работать с функциями, которые работают не со строкой типа string, а со строками типа char*.
Теперь дело за малым. После того как мы считали данные с клавиатуры? у наc сразу посчитано количество строчек? и мы можем обратиться к любой. Создаем массив типа string, указывая, что в нем столько строчек, сколько мы ввели с клавиатуры? и запихиваем в него данные. Запускаем функцию сортировки и получаем массив строк, отсортированный в нужном виде.
Можно не писать функции склейки строки и вытаскивания нужной, но тогда придется указывать количество вводимых строк. Код будет намного меньше и делать так проще, но показанный пример не может быть бесполезным. В реальности, конечно, это решают другим способом. Но для навыков пригодится. Да и адаптировать его на пример вообще без string не должно составить труда. Тогда вообще решение без STL получается, а это значит, что оно пригодное для старых компиляторов. (Не пробовал, но выглядит так, что совсем мало переделывать).
Сортировка строк
Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/dzhon-vlissides/priemy-obektno-orientirovannogo-proektirovaniya-patterny-proektirovaniya-16419747/?lfrom=15589587
Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

В автобусе молодой паренек обращается к девушке: - Девушка, Вы случайно не программистка? - Да. А как Вы догадались? - Да, у Вас такое глупое выражение лица! - Дурак! - Да, я тоже программист.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок