Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiS.doc
Скачиваний:
69
Добавлен:
13.04.2015
Размер:
815.1 Кб
Скачать

8.3 Строковые библиотечные функции

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

char *stpcpy(char *dest, const char *src);

Копирует символы строки, пока не скопирует нулевой символ. Возвращает величину dest + strlen(src). Память для dest должна быть заранее зарезервирована.

char *strcat(char *dest, const char *src);

Присоединяет вторую строку к первой. Возвращает указатель на начало наращенной строки.

char *strchr(const char *s, int c);

Сканирует строку s в поиска первого вхождения заданного символа c. Нулевой символ можно искать наряду с другими. Возвращает указатель на найденный символ или 0, если символа нет.

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

Сравнивает 2 строки. Возвращает целое меньше нуля, если s1 < s2, равное нулю, если s1 == s2, и большее нуля, если s1 > s2

char *strcpy(char *dest, const char *src);

Копирует второй аргумент в первый. Возвращает указатель на копию. Память для dest должна быть заранее зарезервирована.

char *strdup(const char *s);

Копирует строку во вновь создаваемую функцией malloc область памяти. Возвращает указатель на созданную копию или 0 при неудаче. Программист ответственен за освобождение памяти

П р и м е р.

char *dup_str = strdup (string);

...

free (dup_str);

size_t strlen(const char *s);

Подсчитывает размер строки. Возвращает количество символов строки без нулевого символа. Тип size_t определен в файле string.h и других заголовочных файлах как целое без знака: typedef unsigned size_t;

char *strpbrk(const char *s1, const char *s2);

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

char *strrchr(const char *s, int c);

То же, что strchr, но находит последнее вхождение символа c в строку s.

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

Пишет символ ch вместо всех символов строки. Возвращает s.

char *strstr(const char *s1, const char *s2);

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

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

Сканирует первую строку в поисках первого участка, не содержащего символов из s2. Первый вызов функции возвращает указатель на начало первого участка и записывает 0 в s1 сразу после конца участка. Последующие вызовы с NULL в качестве 1-го аргумента обрабатывают строку дальше, пока еще есть такие участки. Если их нет, возвращается 0. Строка s2 может изменяться от вызова к вызову.

Функцию применяют для выделения слов из предложения s1. В строке s2 находятся символы-разделители.

З а м е ч а н и е. Для каждой функции существует вариант с дальними указателями. Его имя, как правило, имеет префикс “_f”.

З а д а ч и. Запрограммировать все строковые библиотечные функции.

8.4 Структуры

Структура — это составной тип данных, который состоит из элементов разных типов. Объявление структуры следует рассматривать как объявление типа.

П р и м е р. Структура, которая хранит сведения о журнале: название, год, номер.

struct magazin {

char* tittle;

int year;

int number;

};

Ниже определена и инициализирована переменная структура mag.

magazin mag = {"Nature", 3, 1995};

Доступ к элементам структуры осуществляется по составному имени:

имя_структуры . имя_элемента

Здесь точка обозначает оператор выбора, а составное имя — дает еще один пример адресного выражения.

Если задан указатель на структуру, то доступ к элементу возможен при помощи операции непрямого выбора:

указатель_на_структуру -> имя_элемента

Стрелка “->”, составленная из двух символов, является оператором непрямого выбора.

Ниже даны примеры работы со структурой magazin.

void main(){

magazin *pm, m;

cout<<mag.tittle<<' '<<mag.number<<'\n';

m.tittle = "Природа";

m.number = 4;

cout<<m.tittle<<' '<<m.number<<'\n';

pm = new magazin;

pm->tittle = "Химия и жизнь";

cout<<pm->tittle<<'\n';

delete pm;

}

Структуры можно присваивать, передавать в виде параметров функции, возвращать в виде результата функции. Структуры нельзя сравнивать операциями “==” и “!=”.

З а д а ч а. Определить связанный список и операции над ним: пополнение и удаление.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]