Читайте также:
|
|
Строка это последовательность символов, принадлежащих конечному множеству символов (алфавиту).
В языке Си строковый тип не предусмотрен, строкой служит массив данных символьного типа char, определяется как char S[n], где n – максимальный размер строки типа unsigned. Заметим, что в прототипах стандартных функций Си используется другое определение этого типа: typedef unsigned size_t. Конец строки определяется нулевым символом (байт, все биты которого нулевые), текущая длина строки равна числу символов до символа исключая его.
Создание и инициализация строки Строка определяется как массив данных символьного типа, например char S[80].Строка может быть инициализирована при ее определении: char S[40]="ЭTO стро-ка данных"; здесь оставшиеся свободными байты инициализируются нулями. Од-нако нельзя присвоить такой строке новое значение оператором присваивания, например, оператор S="Hовая строка" является ошибочным.Можно определить динамическую строку: char* S1; Sl=(char*) calloc(40,sizeof(char))
Только такой строке в любой момент оператором присваивания можно присвоить значение строковой константы: S1="Иванов Иван Иванович".
Определение длины строки S. Осуществляемся последовательным просмотром и подсчётом символов S[i], пока не встретится символ конца строки. Прототип функции: size_t strlen(const char *S): результат (возвращаемое значение) - длина строки в байтах.
Заполнение строки заданным символом. Осуществляется только в пределах текущей длины строки, т.е. все символы строки от начала до конечного символа заменяются заданным символом, при этом длина строки остается прежней. Прототип функции: char* strset(char *S, int с), результат — указатель на начале строки S.
Заполнение части строки заданным символом. Отличается тем что заполняется только заданное число n символов, но в пределах текущей длины строки. Прото-тип функции: char* strnset(char *S, int c, size_t n).
Копирование строки S2 в строку S1. Строка S1 заполняетcя символами из строки S2, включая символ конца строки. Контроль выхода за пределы массива под строку S1 не осуществляется, это возлагается на программиста. Прототип функции: char* strcpy(char *S1, char *S2), результат — указатель на строку S1.
Соединение (конкатенация) строк S1 и S2. К концу строки S1 начиная с символа конца строки копируется строка S2. Строка S2 сохраняется. Длина строки S1 становится равной сумме длин строк S1 и S2, поэтому память, выделенная под S1, должна быть не меньше этой длины. Прототип функции: char* strcat(char S1, const char* S2), возвращаемое значение указатель на строку S1.
Сравнение двух строк S1 и S2. Осуществляется посимвольным сравнением строк. Так как длины строк L1 и L2 могут отличаться, то число сравниваемых символов ограничивается значением min(L1,L2)+l. В этом случае последними сравниваются символ из более длинной строки и нулевой символ замыкающий короткую строку. Сравнение строк заканчивается, когда будут исчерпаны все сравниваемые символы либо при неравенстве очередной пары символов. Результат операции определяется результатом последнего сравнения:
S1[i] == S2[i]) - равен нулю.
S1[i] < S2[i]) - меньше нуля.
S1[i] > S2[i]) - больше нуля.
Прототип функции:int strcmp(const char *S1, const char *S2).
Поиск и выделение лексических единиц в строке.char* strtok(char *S1, const char *S2); в строке S1 осуществляется поиск до первого любого символа-ограничителя, заданного строкой S2. Найденный символ-ограничитель в строке S1 заменяется символом конца строки. Возвращаемое значение — указатель на начало строки.
Поиск заданного символа в строке. Имеет две разновидности. Поиск первого вхождения символа oпределяет позицию, в которой встретился заданный символ при последовательном просмотре символов с начала строки. Поиск последнего вхождения отличается тем, что просмотр символов идет от конца строки к ее началу. Прототипы функций:char* strchr(const char *S, int с) и char* strrchr(const char *S, int c), возвращаемое значение указатель на найденный символ или NULL, если символ не найден.
Поиск в основной строке S1 символов, заданных в строке S2. Имеются три разновидности операции. Первая из них — поиск в строке S1 первого вхождения одного из символов, заданных в строке S2. Осуществляется просмотр символов Sl[i], начиная с начала строки и до ее конца. Если очередной символ Sl[i] совпадает с любым из символов строки S2, то поиск прекращается. Возвращаемое значение —указатель на найденный символ или NULL, если в строке не оказалось символов из строки S2. Прототип функции:char* strpbrk(const char *S1, const char *S2).
Вторая операция отличается от первой только тем, что определяется длина начальной части строки S1, в которой нет символов из строки S2. Прототип функции:size_t strspn(const char *S1, const char *S2).
Третья операция отличается от второй тем, что определяется длина начальной части строки S1, в которой содержатся только такие символы, которые принадлежат множеству символов из строки S2. Прототип функции:size_t strcspn(const char *S1, const char *S2).
Дата добавления: 2015-10-13; просмотров: 136 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Классификация динамических структур данных | | | Структурные типы данных: структуры. Особенности использования. |