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

Строки. Операции над строками. Указатели на строки.

Читайте также:
  1. Активные и пассивные операции банка.
  2. Была сделана операция по тотальному удалению щитовидной железы и близлежащих лимфоузлов. После операции была назначена лучевая терапия и альфа-тироксин 100».
  3. Валюта и валютные ценности. Валютные операции.
  4. Генетический анализ знаковой операции
  5. Действия и операции в структуре учебной деятельности
  6. Другие операции
  7. Замысел Арденнской операции

Строка это последовательность символов, принадлежащих конечному множеству символов (алфавиту).

В языке Си строковый тип не предусмотрен, строкой служит массив данных символьного типа 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 | Нарушение авторских прав


Читайте в этой же книге: Язык программирования Си | Представление данных в памяти компьютера. | Явное преобразование типов | Простые и составные инструкции. | Динамические массивы. Особенности обработки динамических массивов. | ИНДЕКСАЦИЯ В МАССИВАХ | Указатели на функции. Особенности использования. | Основы файловой системы: файл, каталог, дисковод, полное имя файла, внутреннее представление информации в файле. Типы файлов. | Память. Классы памяти. Модификаторы классов памяти. Область видимости, время жизни и место размещения объекта в памяти. | Достоинства, отличительные особенности и сравнительная характеристика языка программирования Си. |
<== предыдущая страница | следующая страница ==>
Классификация динамических структур данных| Структурные типы данных: структуры. Особенности использования.

mybiblioteka.su - 2015-2024 год. (0.006 сек.)