String
Документация к проекту обработки строк на языке C
Введение
Проект представляет собой реализацию библиотеки функций для работы со строками в языке C, аналогичной стандартной библиотеке string.h
, а также частичную реализацию функций sprintf
и sscanf
. Библиотека поддерживает операции над строками, такие как копирование, конкатенация, поиск и форматирование, а также дополнительные функции для обработки строк.
Основные компоненты библиотеки
1. Типы
size_t
: Целочисленный тип без знака, результат применения оператораsizeof
.
2. Макросы
NULL
: Макрос, представляющий нулевой указатель.
3. Функции
Операции с памятью
-
void *memchr(const void *str, int c, size_t n)
: Находит первое вхождение символаc
в первыхn
байтах строки, на которую указываетstr
. -
int memcmp(const void *str1, const void *str2, size_t n)
: Сравнивает первыеn
байтов строкstr1
иstr2
. -
void *memcpy(void *dest, const void *src, size_t n)
: Копируетn
байтов из строкиsrc
в строкуdest
. -
void *memset(void *str, int c, size_t n)
: Заполняет первыеn
байтов строкиstr
символомc
.
Операции со строками
-
char *strncat(char *dest, const char *src, size_t n)
: Добавляет строкуsrc
к концу строкиdest
, добавляя не болееn
символов. -
char *strchr(const char *str, int c)
: Находит первое вхождение символаc
в строкеstr
. -
int strncmp(const char *str1, const char *str2, size_t n)
: Сравнивает первыеn
байтов строкstr1
иstr2
. -
char *strncpy(char *dest, const char *src, size_t n)
: Копирует доn
символов из строкиsrc
в строкуdest
. -
size_t strcspn(const char *str1, const char *str2)
: Определяет длину начального сегмента строкиstr1
, не содержащего символов из строкиstr2
. -
char *strerror(int errnum)
: Возвращает строку с описанием ошибки, соответствующей номеру ошибкиerrnum
. Для платформонезависимой работы реализованы макросы с массивами сообщений об ошибках для macOS и Linux. -
size_t strlen(const char *str)
: Определяет длину строкиstr
, не включая завершающий нулевой символ. -
char *strpbrk(const char *str1, const char *str2)
: Находит первый символ в строкеstr1
, который совпадает с любым символом из строкиstr2
. -
char *strrchr(const char *str, int c)
: Находит последнее вхождение символаc
в строкеstr
. -
char *strstr(const char *haystack, const char *needle)
: Находит первое вхождение строкиneedle
в строкеhaystack
. -
char *strtok(char *str, const char *delim)
: Разбивает строкуstr
на токены, разделенные символами из строкиdelim
.
Форматирование строк
-
int sprintf(char *str, const char *format, ...)
: Форматирует данные и записывает результат в строкуstr
. -
int sscanf(const char *str, const char *format, ...)
: Считывает форматированные данные из строкиstr
.
Спецификаторы формата
Поддерживаются следующие спецификаторы формата в sprintf
и sscanf
:
c
: Символd
: Знаковое десятичное целое числоi
: Знаковое целое число (включая восьмеричное и шестнадцатеричное)e
: Научная нотацияE
: Научная нотация с заглавнойE
f
: Десятичное число с плавающей точкойg
: Кратчайшее представление числаG
: Кратчайшее представление числа с заглавнойE
o
: Беззнаковое восьмеричное числоs
: Строка символовu
: Беззнаковое десятичное целое числоx
: Беззнаковое шестнадцатеричное число (любые буквы)X
: Беззнаковое шестнадцатеричное число (заглавные буквы)p
: Адрес указателяn
: Количество напечатанных символов до%n
%
: Символ%
Флаги
-
: Выравнивание по левому краю.+
: Явное указание знака числа.#
: Специфичные форматирования для чисел и точек.0
: Заполнение числа нулями.
Ширина и точность
-
Ширина: Минимальное количество символов для вывода. Можно указать целое число или использовать
*
для задания ширины как дополнительный аргумент. -
Точность: Количество знаков после десятичной точки для чисел с плавающей точкой и максимальная длина строки для спецификатора
s
. Можно указать число или использовать*
.
Длина
h
: Короткое целое число.l
: Длинное целое число или широкие символы.L
: Длинное число с плавающей точкой.
4. Специальные функции обработки строк
-
void *to_upper(const char *str)
: Преобразует строку в верхний регистр. -
void *to_lower(const char *str)
: Преобразует строку в нижний регистр. -
void *insert(const char *src, const char *str, size_t start_index)
: Вставляет строкуstr
в строкуsrc
на позициюstart_index
. -
void *trim(const char *src, const char *trim_chars)
: Удаляет начальные и конечные символы из строкиsrc
, которые содержатся в строкеtrim_chars
.
Реализация и сборка
Требования к реализации
- Библиотека реализована на языке C стандарта C11.
- Не используется стандартная библиотека
string.h
, кроме как для unit-тестов. - Код оформлен согласно Google Style.
- Используется статическая библиотека
s21_string.a
. - Полное покрытие unit-тестами (не менее 80% каждой функции) с помощью библиотеки Check.
- Функции должны работать с однобайтовыми строками в кодировке ASCII.
Сборка
-
Makefile
: Включает целиall
,clean
,test
,s21_string.a
,gcov_report
.all
: Сборка библиотеки и тестов.clean
: Удаление скомпилированных файлов.test
: Запуск unit-тестов.s21_string.a
: Сборка статической библиотеки.gcov_report
: Генерация отчета покрытия кода.
Примечания
- Функции должны обрабатывать строки корректно, с учетом особенностей работы с памятью и возможных ошибок.
- Реализация функций
sprintf
иsscanf
должна поддерживать частичное форматирование, с дополнительной поддержкой модификаторов формата в необязательных заданиях.