Студопедия

КАТЕГОРИИ:


Архитектура-(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. Аргументы функций условно имеют имена s, t, cs, ct, n, с, причем s и t должны быть описаны как char *s, *t; cs и ct — как const char *cs, *cv;n — как unsigned n; с — как int.

Основные функции стандартной библиотеки string.h [4]:

char *strcat(s, ct) — присоединяет ct к s; возвращает s;


char *strncat{s, ct, n) — присоединяет не более п литер ct к s, завершая s литерой '\0'; возвращает s;

char *strchr(cs, с) — отыскивает в строке cs первый символ, код которого равен значению с, и возвращает значение указателя на данный символ; если символа не оказалось, возвращает значение NULL;

• char *strchr(cs, с) — отыскивает в строке cs последний символ, код которого равен значению с, и возвращает значение указателя на даннный символ; если символа не оказалось, возвращает значение NULL;

char *strcpy(s, ct) — копирует строку ct в строку s, включая '\0'; возвращает

s;

char *strncpy(s, ct, n) — копирует не более п литер строки ct в строку s; возвращает s; дополняет результат литерами '\0', если литер в ct больше п;

int strcmpics, ct) — сравнивает cs с ct; возвращает значечние, меньшее нуля, если cs меньше ct; значение, равное нулю, если строка cs эквивалентна строке ct; и значение, большее 0, если cs больше ct;

int strncmp(cs, ct, n) — сравнивает не более п литер cs и ct; возвращает значение, меньшее 0, если cs меньше ct; О, если строка cs эквивалентна строке ct; и значение, большее 0, если cs больше ct;

int strlen{s) — выдает число символов в строке s без учета нулевого символа конца строки;

char *strlwr(s) — переводит всю строку s в нижний регистр (в строчные буквы);

char *strset(s, с) — заполняет всю строку s в верхний регистр (в прописные буквы);

char *strdup(s) — вызывает функцию malloc и отводит место под копию s;

char *strset(s, с) — заполняет всю строку символами, код которых равен значению с;

char *strnset(s, с, п) — заменяет первые п символов строки s на символы, код которых равен значению с;

char *strpbrk(s, t) — просматривает строку s до тех пор, пока не встретится символ, содержащийся в t;

int strspn{s, i) — возвращает длину начального сегмента строки s, который состоит исключительно из символов, содержащихся в строке t.

В программе строки могут определяться следующим образом [14]:

1) как строковые константы;

2) как массивы символов;

3) через указатель на символьный тип;

4) как массивы строк.

Программист должен понимать, что строка — это массив символов, и под неё необходимо выделять участок оперативной памяти.


Строковая константа

Любая последовательность символов, заключенная в двойные кавычки, рассматривается как строковая константа. Последовательность символов будет размещена в оперативной памяти ЭВМ, включая нулевой байт. Под строку выделяются последовательно идущие ячейки оперативной памяти. Для кодировки одного символа достаточно одного байта.

Если необходимо включить в строку символ двойных кавычек, ему должен предшествовать символ обратной дробной черты:

"Повсюду стали слышны речи:\п"

"У'Пора добраться до картечи!\"\п"

"И вот на поле грозной сечи\п"

"Ночная пала теньЛп". Строковые константы размещаются в статической памяти. Сама последовательность символов в двойных кавычких трактуется как адрес строки. Это аналогично использованию имени массива, служащего указателем на расположение массива.

Массив символов

При определении массива символьных строк необходимо сообщить компилятору требуемый размер памяти.

char m[82];

Компилятор также может самостоятельно определить размер массива символов.

char т2[]="Горные вершины спят во тьме ночной.";

char тЗ[]={'Т','и','х','и','е',' ','д','о','л','и','н', 1 ы', ' \ ' п ', ' о \ ' л \ ' н ', ' ы', ' \'с\'в\'е\ 'ж','е','й',' ','м','г','л','о','й','\0'};

Как и для других массивов, ml и тЪ являются указателями на первые элементы массивов.

 

т2 = == &т2[0]
*т2 =»г'
*(т2 + 1)== 'О'
тЗ == = &т3[0]
*(тЗ + 2) == ' х'

Для создания строки можно использовать указатель.


char *m4 = "He пылит дорога, не дрожат листы...";

Это почти то же самое, что и

char т5[] = "Подожди немного, отдохнешь и ты.";.

В обоих случаях тА и тЪ являются указателями на строки, и размеры массивов определяются компилятором. Однако между тА и тЪ есть и некоторая разница.

Массив или указатель. Во втором случае объявление массива вызывает создание в памяти массива из 33 элементов (по одному на каждый символ плюс один на завершающий символ '\0'). Каждый элемент инициализируется соответствующим символом. В дальнейшем компилятор будет рассматривать имя тЪ как синоним адреса первого элемента массива, т. е. &/и5[0]. Следует отметить, что тЪ является константой-указателем. Нельзя изменить т5, так как это означало бы изменение положения (адреса) массива в памяти. Можно использовать операции, подобные тЪ + 1, для идентификации следующего элемента массива, однако не разрешается выражение ++т5. Оператор увеличения можно использовать с именами переменных, но не констант [14].

В случае с указателем тА в памяти создается 36 элементов для запоминания строки. Но, кроме того, выделяется еще одна ячейка памяти для переменной тА, являющейся указателем. Сначала эта переменная указывает на начало строки, но её значение может изменяться. Поэтому допустимо использовать операцию приращения на единицу: ++тА будет указывать на второй символ строки — 'е' [14].

Различия между массивами и указателями. Рассмотрим различия в использовании описаний следующих двух видов [14]:

char heart[] = "Подожди немного,"; и char * reason = "отдохнешь и ты.";.

Основное отличие состоит в том, что указатель heart является константой, в то время как указатель reason — переменной. Посмотрим, что на самом деле дает эта разница.

Во-первых, и в том и в другом случае можно использовать операцию сложения с указателем.

 

for (i = 0; i < 17; i++ )  
putch ar ( -k (heart + i) ) r
putchar( 1 \n )          
for (i = 0; i < 15; ■ + + )  
putch ar ( -k (reason + i ) );
putchar( 1 \n ) r        




Поделиться с друзьями:


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


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



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




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