Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Операции над строковыми данными

Для обработки строк, представленных одномерными символьными массивами, в библиотеке системных функций предусмотрено довольно много различных операций. Прототипы этих функций сгруппированы в заголовочном файле string.h и большинство их названий начинается с префикса str (от string). Условимся о некоторых обозначениях аргументов и их типах, чтобы не повторять их в приведенной таблице:

· S, S1,S2 – указатель на символьный массив (как правило, имя массива);

· CS – указатель типа const char * (т.е. неизменяемый массив или строковая константа – источник данных);

· ch – код символа, обычно числовое значение типа int;

· k – количество символов.

Таблица 2.
Функция Выполняемое действие
Определение длины строки
strlen(CS) Возвращает количество символов в строке S
Формирование строк
strdup(CS) Запрашивает память, копирует туда содержимое CS и возвращает указатель типа char* на новую строку
strcpy(S1,CS2) Копирует содержимое CS2 в S1, возвращает указатель на S1
strncpy(S1,CS2,k) Копирует первые k символов из CS2 в S1, возвращает указатель на S1
stpcpy(S1,CS2) Копирует CS2 в S1, возвращает указатель на конец S1
strset(S,ch) Расписывает строку S символом ch, возвращает указатель на S1
strnset(S,ch,k) Повторяет k раз символ ch в строке S, возвращает указатель на S1
Конкатенация строк
strcat(S1,CS2) Приписывает содержимое CS2 в конец S1, возвращает указатель на S1 (длина массива S1 должна предусматривать такое расширение)
strncat(S1,CS2,k) Присоединяет первые k символов CS2 к содержимому S1, возвращает указатель на S1
Смена регистра
strlwr(S) замена символов строки S кодами малых букв, действует только на буквы латинского алфавита
strupr(S) замена символов строки S кодами больших букв, действует только на буквы латинского алфавита
Переворот строки
strrev(S) Перестановка символов строки S в обратном порядке
Преобразование в числовые данные
strtol(CS,ptr,r) Число, представленное в символьном виде в CS и записанное в системе счисления с основанием r, преобразуется в машинный формат числа типа long. В указатель ptr заносится адрес символа, прервавшего преобразования. Возвращаемое значение – результат преобразования.
strtoul(CS,ptr,r) Аналогичное преобразование в длинное целое число без знака
strtod(CS,ptr) Преобразование вещественного числа из символьного представления в машинный формат числа типа double.
Сравнение строк
strcmp(CS1,CS2) Возвращаемое значение равно 0, если CS1=CS2, больше 0, если CS1>CS2, и меньше 0, если CS1<CS2
strncmp(CS1,CS2,k) Сравниваются только первые k символов строк CS1 и CS2
stricmp(CS1,CS2) При сравнении игнорируется разница между кодами больших и малых букв
strcmpi(CS1,CS2) Аналогичная операция, разница только в названии функций
strnicmp(CS1,CS2,k) Сравнение первых k символов с игнорированием разницы между кодами больших и малых букв
strncmpi(CS1,CS2,k) Аналогичная операция, разница только в названии функций
Поиск символа
strchr(CS,ch) Строка CS сканируется слева направо до обнаружения символа ch. Если он найден, возвращаемый указатель "смотрит" на этот символ в строке CS, если такого символа нет, то возвращаемый указатель равен null (т.е. 0)
strrchr(CS,ch) Аналогичный поиск с конца строки CS.
Поиск строки
strstr(CS1,CS2) Поиск первого вхождения строки CS2 в строку CS1. Если поиск завершен успешно, возвращается указатель на первый символ найденной подстроки. В противном случае возвращается null
Специальный поиск
strpbrk(CS1,CS2) В строке CS1 ищется первый символ, содержащийся в CS2. Возвращается указатель на найденный символ или null.
strspn(CS1,CS2) Определяется длина начального фрагмента CS1, целиком состоящая из символов CS2 (порядок символов роли не играет)
strcspn(CS1,CS2) Определяется длина начального фрагмента CS1, который не содержит ни одного символа из CS2
strtok(S1,CS2) Поиск в строке S1 лексем, разделенных символами CS2

Некоторые из функций, приведенные в табл. 4.2, нуждаются в дополнительных пояснениях.

В функциях strtol и strtoul, выполняющих преобразование символьного представления числа в соответствующий машинный формат, допускается задание r=0. В этом случае основание системы определяется символьной записью числа. Если строка начинается с символа '0', за которым следуют символы цифр, не превосходящих 7, то число считается восьмеричным. Если строка начинается с комбинации '0x' или '0X', вслед за которой располагаются шестнадцатеричные цифры, то считается, что r=16.

В функции strtok лексемой считается цепочка символов, завершающаяся одним из предусмотренных символов-разделителей. При первом обращении к этой функции в строке S1 находится начальная лексема и возвращаемое значение является указателем на ее начальный символ. Одновременно в строку S1 на место обнаруженного символа-разделителя заносится нулевой байт. Это позволит в дальнейшем работать с найденной лексемой как со строкой. Для поиска следующих лексем в повторных обращениях к функции strtok вместо первого аргумента нужно задавать нулевой аргумент. Функция будет искать следующую лексему, расположенную правее принудительно вставленного нулевого байта. И так можно последовательно обнаружить все лексемы, содержавшиеся в строке S1. Для пояснения приведем следующий пример:

#include <stdio.h>#include <conio.h>#include <string.h>void main(){ char *ptr; ptr=strtok("FEB.14,2006",".,-/"); while(ptr!=NULL) { printf("ptr=%s\n",ptr); ptr=strtok(NULL, ".,-/"); } getch();}//=== Результат работы ===ptr=FEBptr=14ptr=2006
<== предыдущая лекция | следующая лекция ==>
Операции над символьными данными | Управление дисплеем в текстовом режиме
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 910; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.