Программирование >>  Структурное программирование 

1 ... 291 292 293 [ 294 ] 295 296 297 ... 342


mam {

char *stringl = Значение равно 3.14159 ; char *string2 = аонЗечирв ;

cout << stringl = << stringl << \nstring2 = << string2 \п\пДлина начальной части stringl, \n состоящей только из символов string2 = strspn(stringl, string2) << endl;

return 0;

stringl = Значение равно 3.14159 string2 = аонЗечирв

. -t Длина начальной части stringl,

состоящей только из символов string2 =15

Рис. 16.32. Использование функции strspn

-. i Использование strstr

tinclude <iostream.h> И tinclude <string.h>

main ()

char *stringl = абракадабра ; char *string2 = бра ;

cout << stringl = << stringl << \nstring2 = << string2 \п\пОстаток stringl, начинающийсяХп << с первого вхождения string2: strstr(stringl, string2) << endl; return 0;

stringl = абракадабра string2 = бра

Остаток stringl, начинающийся

с первого вхождения string2: бракадабра

Функция strspn (рис. 16.32) определяет длину начальной части строки, являющейся ее первым параметром, которая состоит только из символов строки, являющейся ее вторым параметром. Функция возвращает длину этой начальной части строки.

Функция strstr определяет позицию первого вхождения в строку, являющуюся ее первым параметром, подстроки, являющейся ее вторым параметром. Если подстрока найдена, возвращается указатель на нее в строке первого параметра. В противном случае возвращается указатель NULL. Программа на рис. 16.33 использует strstr для поиска подстроки бра в строке абракадабра .

Использование strspn tinclude <iostream.h> tinclude <string.h>



Прототип функции Описание функции

void *memcpY(void *sl, const void *s2, size t n)

Копирует n символов из объекта, на который указывает s2, в объект, на который указывает si. Возвращается указатель на объект результата.

void *meiiimove (void *sl, const void *s2, si2e t n)

Копирует n символов из объекта, на который указывает s2, в объект, на который указывает si. Копирование осуществляется так, как еспи бы символы сначала копировались из объекта, на который указывает s2, во временный массив, а затем копировались из этого временного массива в объект, на который указывает si. Возвращается указатель на объект результата.

int *memcmp(const void *з1, const void *s2, siza t n)

Сравнивает первые n символов объектов, на которые указывают si и s2. Функция возвращает О, отрицательное значение или положительное значение, если соответственно si равна, меньше или больше s2.

void *memchr(const void *s, int c, size t n)

Определяет первое вхождение символа с (преобразованного к unsigned char) в первые п символов объекта, на который указывает s. Если символ с найден, возвращается указатель на этот символ в объекте. В противном случае возвращается указатель NULL.

void *memset(void *s, int c, size t n)

Копирует символ с (преобразованный к unsigned char) в первые п символов объекта, на который указывает s. Возвращается указатель на объект результата.

Рис. 16.34. Функции работы с памятью из библиотеки обработки строк

Параметры указатели в этих функциях объявляются типа void *. В главе 5 мы увидели, что указатели на данные любого типа могут быть непосредственно присвоены указателям типа void *. Поэтому рассматриваемые функции могут принимать указатели на любые типы данных. Помните, что указатели типа void * сами не могут непосредственно присваиваться указателям какого-либо типа данных. Поскольку указатель типа void * не может быть разименован, каждая функция получает в качестве параметра размер, определяющий число символов (байтов), которые она должна обработать. Для упрощения примеры этого раздела оперируют с массивами символов (блоками символов).

16.12. Функции работы с памятью из библиотеки

обработки строк

Библиотека обработки строк представлена в этом разделе функциями, осуществляющими копирование, сравнение и поиск блоков памяти. Эти функции трактуют блоки памяти как массивы символов. Они могут манипулировать любыми блоками данных. В таблице на рис. 16.34 приведены функции работы с областями памяти из библиотеки обработки строк. При рассмотрении этих функций под объектом подразумевается блок данных.



Использование memcpy #include <iostream.h> tinclude <string.h>

main 0 {

char sl[22], s2[ ] = Копируется эта строка ; memcpy(sl, s2,22);

cout << После того, как s2 скопирована в si функцией memcpy, \n

si содержит \ si \ endl; return 0;

После того, как s2 скопирована в si функцией memcpy, si содержит Копируется эта строка

Рис. 16.35. Использование функции memcpy

Функций memmove подобно memcpy копирует заданное число символов из объекта, на который указывает ее второй параметр, в объект, на который указывает ее первый параметр. Но копирование осуществляется так, как если бы байты сначала копировались из объекта, на который указывает второй параметр, во временный массив символов, а затем копировались из этого временного массива в объект, на который указывает первый параметр. Это позволяет, например, копировать символы из одной части строки в другую часть той же строки.

Типичная ошибка программирования 16.11

Все функции копирующие строки, кроме memmove, дают неопределенный результат при копировании одной части строки в другую часть той же строки.

Программа на рис. 16.36 использует функцию memmove для копирования последних 10 байтов массива х в первые 10 байтов того же массива х.

Функция тетстр (рис. 16.37) сравнивает указанное число символов своего первого параметра с соответствующими символами своего второго параметра. Функция возвращает О, отрицательное значение или положительное значение, если соответственно первый параметр равен, меньше или больше второго параметра.

Функций тетеру копирует заданное число символов из объекта, на который указывает ее второй параметр, в объект, на который указывает ее первый параметр. Функция может принимать указатель на объект любого типа. Результат работы функции не определен, если эти два объекта перекрываются в памяти, например, если они являются частями одного и того же объекта. Программа на рис. 16.35 использует memcpy для копирования строки, хранящейся в массиве s2, в массив si.



1 ... 291 292 293 [ 294 ] 295 296 297 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика