#pragma once #include // Str это структура, которая хранит в памяти строки произвольной длинны // len -- содержит текущую длину строки (0 если строка не инициализирована или нулевого размера) // capacity содержит размер динамически инициализированного массива ptr struct Str { int len; int capacity; char *ptr; }; typedef struct Str str; // Инициализация пустой строки void str_init(str *s); // Инициализация строки с данными void str_init_data(str *s, const char *initial); // Деинициализируем строку (освобождаем память по указателю ptr) void str_deinit(str *s); // Функция должна вернуть указатель на ptr char *str_data(str *s); //Функция копирует в строку содержимое cstr. void str_set(str *s, char *cstr); //Функция создаёт и возвращает новую строку, копию s str str_copy(str *s); // Функция возвращает количество символов ch в строке str int str_count(str *s, char ch); //добавляет к строке строку cstr void str_append(str *s, char *cstr); //добавляет к строке строку cstr void str_append_n(str *s, char *cstr, int len); //Если строка s содержит больше len байт, то уменьшает размер строки до len байт void str_shrink(str *s, int len); //Искать подстроку subsr в строке s. Вернуть индекс в строке или -1 int str_find(str *s, char *substr); //Функция создаёт новую строку, которая должна содержать подстроку s, начиная с символа по индексу start_idx, и быть длины length символов (или меньше, если в строке s не хватает символов). //Пример использования: // str_init(&s, "hello world"); // str s2 = str_sub(&s, 6, 5); // В s2 должна оказаться подстрока "world" str str_sub(str *s, int start_idx, int length); //Функция ищет в исходной строке s подстроки substr и заменяет их на replacement //Возвращает число заменённых подстрок. //Пример использования: // str_init(&s, "foo bar baz foo"); // str_replace(&s, "foo", "test"); //В результате в строке &s должна получиться строка "test bar baz test", //функция должна вернуть 2 int str_replace(str *s, char *substr, char *replacement);