String

Форк
0

3 месяца назад
3 месяца назад
README.md

Документация к проекту обработки строк на языке 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 должна поддерживать частичное форматирование, с дополнительной поддержкой модификаторов формата в необязательных заданиях.

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.