Символьные библиотечные функции


По некоторым оценкам, до 70% времени компьютер тратит на манипуляцию с текстовыми строками. Мы рассмотрим две библиотеки. Первая из них реализуется на основе заголовочного файла <ctype.h>. В это файле содержатся макрокоманды и их макроопределения для работы с отдельными символами. Эти макро работают для основной ASCII-таблицы, т.е. для кодов от 0 до 127. Для кодов 128-255 макро могут не сработать («русскоязычная часть таблицы»).

#include <ctype.h>

isalnum(c) – истина, если с буква или цифра

isalpha(c) - истина, если с буква

isascii(c) – истина, если код с ≤ 127

isdigit(c) – истина, если с символ десятичной цифры

ispunct(c) – истина, если с символ пунктуации

isspace(c) – истина, если с символ пустого места или пробел

и др.

В заголовочном файле <string.h> расположены прототипы функций для работы со строками и блоками памяти. В основном, их параметрами являются указатели на строки. Если выполняется пересылка, то указатель на место назначения должен ссылаться на предварительно зарезервированное место в памяти. Строки должны заканчиваться символом ‘\0’.

#include <string.h>

char strcpy(dest,src); /* копирует из src в dest; возвращает

char *dest,*src; указатель на начало dest */

size_t strlen(s) /*возвращает длину строки s,

const char *s; не включая ‘\0’ size_t≡unsigned*/

и др.

Функций для работы со строками выполняют следующее:

· копирование строк,

· сравнение строк,

· сцепление,

· выделение heap-памяти и копирование строки,

· отыскивание вхождения подстрок, отдельных символов или символов из набора,

· размножение заданного символа по строке,

· изменение строчных и прописных букв.

 

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

Эти функции не анализируют символ ‘\0’, для них явно указывается длина блока. ‘\0’ рассматривается как обычный символ. Для моделей памяти TINY, SMALL, MEDIUM эти функции работают с блоками, расположенными в пределах общего сегмента данных – до 64 Кбайт и только movedata( ) выполняет межсегментный перенос.

Эти же функции для работы с блоками имеются в заголовочном файле <mem.h>

Пример.

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

#define BLANK “” /* Литерал, создающий ’\0’ */

main(void)

{char *token, byf[81], *separators=”\t,/;”;

int i;

puts(“Введите строку и затем ENTER. \n”);

while(strcmp(gets(buf),BLANK)!=0)

{

i=0;

token=strtok(buf,separators);

while(token!=NULL)

{

printf(“Лексема%d - %s\n”,i,token);

token=strtok(NULL,separators);

i++;

}

} exit(0);

}

Эта программа выделяет из входных строк, поступающих с терминала токены, т.е. группы символов, разделяемые символами табуляции, запятой, точкой или точкой с запятой.

Функция puts() выводит строку в выходящий поток, а gets читает с терминала и возвращает адрес аргумента.

Функция strcmp(s1,s2) – сравнивает строки s1 и s2 и возвращает 0, если символы строк равны, значение >0 , если s1>s2 и <0 , - если s1<s2. Сравнение выполняется на ASCII-кодах слева - направо.

Функция strtok(s1,s2) выделяет токен из строки s1, ограниченную символом из s2. Выделенный токен ограничивается символом ‘\0’. Адрес токена является результатом. Если не выделен токен, то результат NULL. Последующие вызовы strtok с NULL вместо s1 обеспечивают выделение следующих токенов. NULL возвращается, если вся исходная строка просмотрена.



Дата добавления: 2016-05-26; просмотров: 1402;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

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

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.011 сек.