Skip to content

Latest commit

 

History

History
84 lines (69 loc) · 11.4 KB

README_RUS.md

File metadata and controls

84 lines (69 loc) · 11.4 KB

s21_string

s21_stringplus

Introduction

В данном проекте разработанна собственная реализация библиотеки string.h на языке программирования Си с некоторыми дополнениями (с собственной реализацией функций sprintf). Библиотека string.h является основной библиотекой языка Си по обработке строк. В рамках этого проекта предполагается отработка задач на работу со строковыми данными и закрепление структурного подхода.

Функция Описание
1 void *memchr(const void *str, int c, size_t n) Выполняет поиск первого вхождения символа c (беззнаковый тип) в первых n байтах строки, на которую указывает аргумент str.
2 int memcmp(const void *str1, const void *str2, size_t n) Сравнивает первые n байтов str1 и str2.
3 void *memcpy(void *dest, const void *src, size_t n) Копирует n символов из src в dest.
4 void *memset(void *str, int c, size_t n) Копирует символ c (беззнаковый тип) в первые n символов строки, на которую указывает аргумент str.
5 char *strncat(char *dest, const char *src, size_t n) Добавляет строку, на которую указывает src, в конец строки, на которую указывает dest, длиной до n символов.
6 char *strchr(const char *str, int c) Выполняет поиск первого вхождения символа c (беззнаковый тип) в строке, на которую указывает аргумент str.
7 int strncmp(const char *str1, const char *str2, size_t n) Сравнивает не более первых n байтов str1 и str2.
8 char *strncpy(char *dest, const char *src, size_t n) Копирует до n символов из строки, на которую указывает src, в dest.
9 size_t strcspn(const char *str1, const char *str2) Вычисляет длину начального сегмента str1, который полностью состоит из символов, не входящих в str2.
10 char *strerror(int errnum) Выполняет поиск во внутреннем массиве номера ошибки errnum и возвращает указатель на строку с сообщением об ошибке. Нужно объявить макросы, содержащие массивы сообщений об ошибке для операционных систем mac и linux. Описания ошибок есть в оригинальной библиотеке. Проверка текущей ОС осуществляется с помощью директив.
11 size_t strlen(const char *str) Вычисляет длину строки str, не включая завершающий нулевой символ.
12 char *strpbrk(const char *str1, const char *str2) Находит первый символ в строке str1, который соответствует любому символу, указанному в str2.
13 char *strrchr(const char *str, int c) Выполняет поиск последнего вхождения символа c (беззнаковый тип) в строке, на которую указывает аргумент str.
14 char *strstr(const char *haystack, const char *needle) Находит первое вхождение всей строки needle (не включая завершающий нулевой символ), которая появляется в строке haystack.
15 char *strtok(char *str, const char *delim) Разбивает строку str на ряд токенов, разделенных delim.

sprintf Спецификаторы

Спецификатор Результат sprintf
1 с Символ
2 d Знаковое десятичное целое число
3 o Беззнаковое восьмеричное число
4 f Десятичное число с плавающей точкой
5 s Строка символов
6 u Беззнаковое десятичное целое число
7 X Беззнаковое шестнадцатеричное целое число (заглавные буквы)
8 x Беззнаковое шестнадцатеричное целое число
9 n Количество символов, напечатанных до появления %n
10 % Символ %

sprintf Флаги

Флаг Описание
1 - Выравнивание по левому краю в пределах заданной ширины поля. Выравнивание по правому краю используется по умолчанию (см. подспецификатор ширины)
2 + Заставляет явно указывать знак плюс или минус (+ или -) даже для положительных чисел. По умолчанию только отрицательным числам предшествует знак "-"
3 (пробел) Если знак не будет выведен, перед значением вставляется пробел

sprintf Длина

Длина Описание
1 h Аргумент интерпретируется как короткое int или короткое int без знака (применяется только к целочисленным спецификаторам: i, d, o, u, x и X)
2 I Аргумент интерпретируется как длинное int или длинное int без знака для целочисленных спецификаторов (i, d, o, u, x и X) и как широкий символ или строка широких символов для спецификаторов c и s.

Специальные функции обработки строк (вдохновленные классом String в языке C#)

Функция Описание
1 void *to_upper(const char *str) Возвращает копию строки (str), преобразованной в верхний регистр. В случае какой-либо ошибки следует вернуть значение NULL
2 void *to_lower(const char *str) Возвращает копию строки (str), преобразованной в нижний регистр. В случае какой-либо ошибки следует вернуть значение NULL
3 void *insert(const char *src, const char *str, size_t start_index) Возвращает новую строку, в которой указанная строка (str) вставлена в указанную позицию (start_index) в данной строке (src). В случае какой-либо ошибки следует вернуть значение NULL
4 void *trim(const char *src, const char *trim_chars) Возвращает новую строку, в которой удаляются все начальные и конечные вхождения набора заданных символов (trim_chars) из данной строки (src). В случае какой-либо ошибки следует вернуть значение NULL

Реализация функций библиотеки string.h

Реализованы описанные выше функции библиотеки string.h, с указанными ниже требованиями:

  • Библиотека должна быть разработана на языке Си стандарта C11 с использованием компилятора gcc
  • Не использовать устаревшие и выведенные из употребления конструкции языка и библиотечные функции. Обращать внимания на пометки legacy и obsolete в официальной документации по языку и используемым библиотекам. Ориентироваться на стандарт POSIX.1-2017
  • При написании кода необходимо придерживаться Google Style
  • Оформить решение как статическую библиотеку (с заголовочным файлом s21_string.h)
  • Библиотека должна быть разработана в соответствии с принципами структурного программирования, должно быть исключено дублирование в коде
  • Подготовить полное покрытие unit-тестами функций библиотеки c помощью библиотеки Check
  • Unit-тесты должны проверять результаты работы вашей реализации путём ее сравнения с реализацией стандартной библиотеки string.h
  • Unit-тесты должны покрывать не менее 80% каждой функции
  • Предусмотреть Makefile для сборки библиотеки и тестов (с целями all, clean, test, s21_string.a, gcov_report)
  • В цели gcov_report должен формироваться отчёт gcov в виде html страницы. Для этого unit-тесты должны запускаться с флагами gcov
  • Перед каждой функцией использовать префикс s21_
  • Запрещено копирование реализации и использование стандартной библиотеки string.h и других библиотек по обработке строк везде, кроме unit-тестов
  • Запрещено использование системных списков ошибок, включая списки, непрописанные в стандартах POSIX (sys_nerr, sys_errlist). Вместо этого необходимо реализовать - свои платформозависимые списки ошибок, как это было упомянуто в описании функции strerror
  • Необходимо соблюсти логику работы стандартной библиотеки string.h (в части проверок, работы с памятью и поведения в нештатных ситуациях - здесь помогут тесты)
  • Функции должны работать с z-строками из однобайтовых символов в кодировке ASCII.