ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Символьные библиотечные функцииПо некоторым оценкам, до 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 возвращается, если вся исходная строка просмотрена. Не нашли, что искали? Воспользуйтесь поиском:
|