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

Нахождение первого вхождения символа в блок памяти

void *memchr(const void *p, int ch, size_t n);

Возвращает указатель на первое вхождение байта, представленного младшим байтом аргумента ch в блоке памяти р длиной n.

Тип size_t (заголовочный файл <stdio.h>) является беззнаковым целочисленным типом, используемым для представления результата операции sizeof. Этот тип не может быть длиннее, чем unsigned long.

Сравнение блоков памяти

int memcmp(const void *p1, const void *p2, size_t n);

Сравнивает два блока памяти и возвращает значение: меньше нуля, равное нулю или больше нуля — аналогично кодам возврата функции strcmp.

Копирование блоков памяти

void *memcpy(void *dest, const void *src, size_t n);

Копирует блок памяти длиной n байт из адреса src по адресу dest.

void *memmove( void *dest, const void *src, size_t n);

Функция аналогична memcpy, но блоки dest и src могут перекрываться.

Заполнение блока памяти символами

void *memset(const void *p, int ch, size_t n);

Заполняет блок памяти символом, взятым из младшего байта ch.

Сложение строк

char *strcat(char *s1, char *s2);

Добавляет s2 к s1 и возвращает s1. В конец результирующей строки добавляется нуль-символ.

Поиск символа в строке

char *strchr(char *s, int ch);

Возвращает указатель на первое вхождение символа ch в строку s, если его нет, то возвращается NULL.

Сравнение строк

int *strcmp(char *s1, char *s2);

Сравнивает строки и возвращает отрицательное (если s1 меньше s2), нулевое (если s1 равно s2) или положительное (если s1 больше s2) значение.

char *strcoll(char *sl, char *s2);

Cравнивает строки аналогично strcmp, но учитывает установки локализации (информацию, зависящую от страны).

Копирование строк

char *strcpy(char *sl, char *s2);

Функция копирует s2 в s1 и возвращает s1.

Поиск символов одной строки в другой

size_t strcspn(char *sl, char *s2);

Возвращает значение индекса любого из символов из s2 в строке s1.

Поиск строки с описанием ошибки

char *strerror(size_t n);

Возвращает указатель на строку с описанием ошибки номер n.

Определение длины строки

size_t strlen(char *s);

Функция возвращает длину строки (без учета нуль-символа).

Сложение строки с несколькими символами другой строки

char *strncat(char *sl, char *s2, size_t n);

Функция добавляет не более n символов из s2 к s1 и возвращает s1. Первый символ s2 пишется на место завершающего нуль-символа строки s1. Если длина строки s2 меньше n, переписываются все символы s2. К строке s1 добавляется нуль-символ. Если строки перекрываются, поведение не определено.

Сравнение строки с несколькими символами другой строки

int strcmp(char *sl, char *s2, size_t n);

Сравнивает s1 и первые n символов s2 и возвращает отрицательное (если s1 меньше s2), нулевое (если s1 равно s2) или положительное (если s1 больше s2) значение.

Копирование нескольких символов одной строки в другую

char *strncpy(char *sl, char *s2, size_t n);

Копирует не более n символов из s2 в s1 и возвращает s1. Если длина исходной строки превышает или равна т, нуль-символ в конец строки s1 не добавляется. В противном случае строка дополняется нуль-символами до n-го символа. Если строки перекрываются, поведение не определено.

Поиск одного из символов строки в другой строке

char *strpbrk(char *sl, char *s2);

Возвращает указатель на символ, являющийся первым вхождением любого из символов из s2 в строку s1, если его нет, возвращается NULL.

Поиск символа в строке

char *strrchr(char *s, int ch);

Возвращает указатель на первое вхождение символа ch в строку s справа, если его нет, возвращает NULL.

Поиск символа строки, отсутствующего в другой

size_t strspn(char *sl, char *s2);

Возвращает индекс первого символа в s1, отсутствующего в s2.

Поиск подстроки в строке

shar *strstr(char *sl, char *s2);

Выполняет поиск первого вхождения подстроки s2 в строку s1. В случае удачного поиска, возвращает указатель на элемент из s1, с которого начинается s2, и NULL в противном случае.

Выделение лексем из строки

char *strtok(char *s1, char *s2);

Возвращает следующую лексему из s1, отделенную любым из символов из набора s2.

Преобразование строк на основе текущей локализации

size_t strxfrm(char *s1, char *s2, size_t n);

Преобразует строку из s2 и помещает ее в s1 на основе текущей локализации. Преобразуется не более n символов.

Функции для работы с многобайтовыми символами

Для работы с многобайтными символами (типа wchar_t) предназначены функции: wsstrcat, wcscol1, wcscpy, wcscspn, wcslen, wcsncat, wcsncmp, wcsncpy, wcspbrk, wcsrchr, wcsspn, wcsstr, wcstok, wcstrxfrm, wmemcpy, wmemmove, wmemset. Данные функции аналогичны функциям для работы с символами типа char.

Например, функция сложения строк wsccat имеет формат, аналогичный формату функции strcat, и отличается только типом аргументов и возвращаемого значения:

wchar_t *wcscat(wchar_t *s1, wchar_t *s2);

Функция добавляет s2 к s1 и возвращает s1.

Пример: запрос пароля пароль не более трех раз.

#include <stdio.h>

#include <string.h>

int main( ){

char s[80], passw[] = "kuku"; // passw - эталонный пароль.

// Можно записать как *passw = "kuku";

int i, k = 0;

for (i = 0; !k && i<3; i++){

printf("\nВведите пароль;\n");

gets(s);

if (strstr(s,passw)) k = 1; //сравнение строк

}

if (k) printf("\nпapoль принят");

else printf("\nпapoль не принят");

return 0;

}

Распространенные ошибки при работе со строками — отсутствие нуль-символа и выход указателя при просмотре строки за ее пределы.