Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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

}

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





Поделиться с друзьями:


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 721 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Два самых важных дня в твоей жизни: день, когда ты появился на свет, и день, когда понял, зачем. © Марк Твен
==> читать все изречения...

2283 - | 2108 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.