10.27 Память на куче

Форма для сдачи

Контрольная работа

Повторение:

Бывает по-разному, но обычно у запущенной программы в ОС:

Почему так? Так пошла эволюцияПотому что!!! (+потому что виртуальная память, а так удобнее)

{OK} strlen, strlcpy и strlcat: ввести число n и строку, сформировать и вывести строку, повторенную n раз

NB! Вот здесь начали сильно тормозить из-за отсутствия нормальных падаванок

Тип void * и двойные ссылки; malloc() и calloc()

:)) Был ли void * на лекциях? Для чего нужен?

:)) Тип int ** и ему подобные — для чего нужны?

Кто маллочит — тот и фрит!

NB! Это было только в режиме быстрой малопонятной падаванки

Ввод строки произвольного размера

Работа getline

  1. {OK} Ввод строки произвольного размера (для этого надо инициализировать приёмник NULL-ом)

(требуется free()):

NB! Досюда не дошли, но это хотя бы несложно

Массив строк

Д/З (можно делать)


  1. Поиск с заменой. Ввести три cлова — s, a и b. Вывести строку s, в которой все вхождения a будут заменены на b. Повторную замену (в случае, когда после замены образуются новые вхождения) делать не надо.

    • Поиск и замену вести в один проход среди найденных вхождений a в s в порядке от начала к концу. Например, при s="11111", a="11", b="2" результатом замены должно быть "221".

    • Нет повторной замены: "aba" → "ca" в строке "ababa". Вхождение aba в ababa одно (за первым aba следует только ba) ⇒ результат поиска с заменой — "caba".

    xqwedfqweasadsadfaqweqwesdf qwe RTYS
    →
    xRTYSdfRTYSasadsadfaRTYSRTYSsdf
  2. Ввести две строки длиной не более 100 символов, вывести их наиболее длинную общую подстроку. Если таких подстрок несколько, вывести ту, что следует раньше в первой строке. Если общих подстрок нет, вывести "FAIL".
    01uj12qawsed23tgyhej34
    uj-tgyhej-qawsed
    →
    qawsed
  3. Ввести последовательность «плюсфрагментов» — цепочек произвольных символов, разделённых символом '+'. Несколько символов-разделителей подряд в строке быть не может. Вывести только фрагменты, целиком состоящие из латинских гласных a, e, i, o, u. Внутри фрагмента могут встречаться пробелы и переводы строки. Совет: getdelim и strspn

    qwe+aeuio+sd f+aeeug+ae
    →
    aeuio
    ae
  4. Ввести массив строк и отсортировать их по количеству запятых любым алгоритмом устойчивой сортировки. Вывести отсортированные строки, каждую на своей строке экрана.
    • Алгоритм устойчивой сортировки сохраняет исходный порядок среди элементов, имеющих одинаковое значение критерия сортировки. Годится «пузырёк».
    • Поскольку массив строк это массив элементов типа char *, то чтобы поменять местами строки в массиве, достаточно поменять местами указатели на них.

    • Не следует каждый раз заново считать для строки значение ключа (количество запятых). Заведите массив ключей, заполните его, и переставляйте его элементы одновременно с перестановкой элементов массива строк.
        October 2026    
    Su Mo Tu We Th Fr Sa
                 1  2  ,
     4  5  6  7  8  9 10
    11 12 1, 14 15 16 17
    18 19 20 21 22 2, 24
    25 26 27 28 29 ,0 ,1
      
    →
        October 2026    
    Su Mo Tu We Th Fr Sa
     4  5  6  7  8  9 10
                        
                 1  2  ,
    11 12 1, 14 15 16 17
    18 19 20 21 22 2, 24
    25 26 27 28 29 ,0 ,1
    • Обратите внимание на то, что во входных данных есть пустая строка, которая содержит только '\n', — она учитывается и выводится четвёртой

LecturesCMC/AL/Prac/16_Malloc (последним исправлял пользователь FrBrGeorge 2026-10-28 17:54:55)