Функции стандартной библиотеки для работы со строками в стиле С (заголовочный файл 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;
}
Распространенные ошибки при работе со строками — отсутствие нуль-символа и выход указателя при просмотре строки за ее пределы.