10.22 Строки

TODO Не дошли до malloc(), требуется пересмотр объёма + inplace документация

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

:)) Что мы знаем про строки из лекций?

Ввод и вывод строк

Строковые функции

вот все… ой, нет, вот ещё

Во всех строковых функциях Си нужно всегда следить:

TODO Вот здесь мы остановились

Выделение памяти на куче

Повторение:

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

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

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

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

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

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

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

Работа getline

Массив строк

Д/З

В заданиях разрешается (и рекомендуется!) пользоваться стандартными функциями и l-функциями для строк


  1. Ввести строку размера не больше 1000, подсчитать в ней количество: цифр, строчных букв латиницы, прописных букв латиницы. Вывести результаты подсчета через пробел.
    • Подсказка: ASCII-коды можно сравнивать, а коды соответствующих символов идут в таблице подряд

    Did you know that for the price of a 280-Z you can buy two Z-80's?
    →
    5 40 3
  2. Ввести строку размера не больше 1000, состоящую из слов, разделённых одним или несколькими пробелами. Вывести через пробел слова, которые начинаются и оканчиваются одним и тем же символом (если в слове один символ, оно на него и начинается и заканчивается). Массив для хранения строки объявить глобально.
    did you    know that
    →
    did that
  3. Ввести построчно несколько строк, вывести длину их общего префикса (попарного сравнения строк-соседей достаточно). Признак конца ввода: EOF.

    Feral dog
    Ferrum dwa o tri
    Ferrari turbo 128
    →
    3
  4. Квадратор
    • ввести положительные w и h — ширина и высота «экрана»
    • в цикле вводить 0 или более 4-элементных последовательностей вида (c,X,Y,s), где X и Y — координаты левого верхнего угла квадрата, s — длина его стороны (не меньше 1), а c — символ которым он заполняется на экране. Признак конца ввода: EOF. Для ввода символа-заполнителя используйте в scanf спецификатор "%c".
    • вывести прямоугольник из h×w точек, на котором соответствующими символами «нарисованы» квадраты соответствующих размеров в соответствующих местах. Координаты левого верхнего угла поля — 0,0; координаты растут вправо вниз. Проверять, что квадраты не выходят за границы поля, не надо. Более поздние по порядку ввода квадраты рисуются поверх более ранних. Не занятые квадратами позиции содержат точки "."

20 23
@ 1 1 5
! 2 3 1
# 4 5 11
/ 8 11 9

→

....................
.@@@@@..............
.@@@@@..............
.@!@@@..............
.@@@@@..............
.@@@###########.....
....###########.....
....###########.....
....###########.....
....###########.....
....###########.....
....####/////////...
....####/////////...
....####/////////...
....####/////////...
....####/////////...
......../////////...
......../////////...
......../////////...
......../////////...
....................
....................
....................


LecturesCMC/AL/Prac/15_Strings (последним исправлял пользователь FrBrGeorge 2026-10-22 23:58:42)