Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1.docx
Скачиваний:
11
Добавлен:
26.09.2019
Размер:
364.88 Кб
Скачать

Функции работы со строками.

Работу со строками в C можно проводить пользуясь обычными приёмами работы с массивами или же функциями работы с памятью.

Так, например, операция индексации, применённая к массиву символов, вернёт один символ хранящейся в нём строки:

char str[]="TempString";

c=str[2];

Можно также применять функции сравнения и копирования памяти, описанные в файле memory.h, например memcmp(), memcpy и другие. Но для более удобной работы со стрингами в C существует набор функций string.h, в которой содержатся функции работы со строковыми данными. В большинстве случаев они очень похожи на функции работы с памятью, но у них есть одно существенное отличие – функции работы со стрингами автоматически находят терминирующий ноль и вычисляют длину стринга, тем самым освобождая программиста от необходимости постоянно указывать точную длину строки.

Основные функции для работы со строковыми данными (наиболее часто используемые выделены курсивом):

Форматирование строк.

int sprintf ( char *buffer, const char *format [, argument] ... );

Запись форматированных данных в массив символов.

Работа функции полностью аналогична работе функции printf, но, в отличие от последней, форматированная строка не выводится на экран, а записывается в область памяти, на которую указывает указатель buffer. Это может быть динамически выделенная память, или массив символов (статически выделелнная память). Размер выделенной памяти должен быть достаточным, для размещения в нём полученной форматированной строки.

Переменная format задаёт формат размещения данных, а список необязательных параметров [argument] задаёт значения данных, которые должны быть отформатированы.

int sscanf( const char *buffer, const char *format [, argument ] ... );

Чтение данных по заданному формату из строки.

Работа функции полностью аналогична работе функции scanf, но, в отличие от последней, исходные данные не вводятся с клавиатуры, а считываются из области памяти, на которую указывает указатель buffer.

Переменная format задаёт формат разбора данных, а список необязательных параметров [argument] содержит указатели на переменные, в которые должны быть считаны значения по заданному формату.

Более подробно работа функций форматированного ввода-вывода будет рассмотрена позднее.

strftime Создание форматированной строки с датой и временем.

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

int strcmp( const char *string1, const char *string2 );

Сравнение 2 строк. Функция возвращает:

-1, если string1<string2;

1, если string1>string2;

0, если string1=string2;

Сравнение производится последовательным сравнением символов, стоящих в данных строках в одинаковых позициях.

  • Если все символы равны и строки имеют одинаковую длину, то строки считаются равными.

  • Если строки имеют разную длину, но короткая строка является началом длинной (например, "ABC" и "ABCDE"), то короткая строка считается меньше длинной.

  • Если в ходе сравнения встретились различные символы, то та строка, в которой содержится символ с меньшим кодом, считается меньшей (например, "ABC"<"ABD", "ABCDEF"<"AH")

int stricmp( const char *string1, const char *string2 );

Сравнение 2 строк без учёта регистра символов.

int strncmp( const char *string1, const char *string2, size_t count );

Сравнение n первых символов 2 строк.

int strnicmp( const char *string1, const char *string2, size_t count );

Сравнение n первых символов 2 строк без учёта регистра символов.

Объединение строк.

char *strcat( char *strDestination, const char *strSource );

Объединение 2 строк. Формируется строка, составленная из содержимого области памяти, на которую указывает strDestination, и добавленного к ней в конце содержимого области памяти, на которую указывает strDestination. Содержимое полученной строки записывается в strDestination. Размер выделенной памяти, на которую указывает strDestination, должен быть достаточно большим для того, чтобы в нём поместилась сформированная строка. Обеспечение этого условия возлагается на программиста.

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

strncat Объединение n первых символов 2 строк.

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

char *strcpy( char *strDestination, const char *strSource );

Копирование одну строку в другую (содержимое одного массива символов в другой). Функция копирует строку, содержащуюся в strSource в область памяти, на которую указывает strDestination. Размер выделенной памяти, на которую указывает strDestination, должен быть достаточно большим для того, чтобы в нём поместилась строка, хранящаяся в strSource. Обеспечение этого условия возлагается на программиста.

strncpy Копирование строки, состоящей из n первых символов исходной строки в результирующий символьный массив.

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

size_t strlen( const char *string );

Вычисление длины строки (в символах).

Функция возвращает длину строки в символах, не включая в их число терминирующий ноль (например, strlen("ABC") будет равно 3).

Смена регистра символов.

strlwr Смена регистра всех символов строки на нижний (строчные буквы).

strupr Смена регистра всех символов строки на верхний (заглавные буквы).

Запись символов.

strset Заполнение строки символом с заданным кодом (все символы данной строки будут заменены на заданный символ).

strnset Заполнение n первых символов строки символом с заданным кодом

Реверсирование стринга.

strrev Реверсирование строки (запись задом наперёд).

Функции поиска.

char *strstr( const char *string, const char *strCharSet );

Поиск первого вхождения искомой строки strCharSet в заданной строке string.

  • Если строка strCharSet содержится в строке string, то функция возращает указатель на её первое вхождение в строку string (указатель на ячейку памяти с первым символом этой подстроки).

  • Если strCharSet не содержится в string, то функция возвращает NULL.

  • Если strCharSet является пустой строкой, то функция возвращает string;

strspn Поиск первого вхождения любой подстроки искомой строки в заданной строке.

strcspn Поиск в данной строке первого символа, содержащегося в искомой строке (возвращает индекс символа).

strspnp Поиск в данной строке первого символа, не содержащегося в искомой строке.

strchr Поиск в данной строке первого вхождения искомого символа.

strpbrk Поиск в данной строке первого символа, содержащийся в искомой строке (возвращает указатель на ячейку памяти, хранящую этот символ).

strrchr Поиск в данной строке последнего вхождения искомого символа.

char *strtok( char *strToken, const char *strDelimit );

Функция разбиения строки на элементы. Использует в качестве разделителя символы, заданные в анборе strDelimit.

  • Если strToken!=NULL, то функция начинает процесс разбиения и возвращает указатель на первый элемент.

  • Если strToken==NULL, то функция возвращает указатель на очередной элемент, или же NULL, если все элементы уже были перебраны.

Для большинства функций в string.h существуют похожие функции, ортличающиеся наличием символа 'n' в имени функции (например, strcmp и strncmp). Обычно они выполняют одну и ту же функцию. Отличие между ними заключается в том, что функция без 'n' оперирует со всей строкой, т.е. с набором символов от начала строки до терминирующего нуля.

Функция, содержащая 'n' имеет дополнительный параметр – количество символов count от начала строки, с которыми будут проводиться операции. Если заданное количество символов меньше длины строки, то из заданного стринга будет сформирован новый, содержащий только count первых символов, а потом уже к нему будет применена заданная операция. Если же count больше или равно длине строки, то работы будет проводиться со всей строкой целиком.

  1. Библиотека функций языка С. Функции ввода-вывода.