Попробуйте часть кода до слова main заменить на #include "stdafx.h" //1 #include <iostream> //2 using namespace std; //3 |
Системные данные текстового типа
4.5. Операции над текстовыми данными
4.5.1. Операции над символьными данными
Значения символьных данных эквивалентны однобайтовым целым числам. Поэтому им можно присваивать целочисленные значения, равные соответствующим кодам таблицы ASCII, сравнивать на принадлежность тем или иным интервалам. Подобного рода операции упрощаются, если прибегнуть к группе специальных функций, прототипы которых сосредоточены в файле ctype.h. Все эти функции организованы по единому шаблону – их единственным аргументом является числовой код анализируемого символа. Возвращаемое каждой функцией значение либо равно 0, если соответствующая проверка дала отрицательный результат, либо отлично от нуля в случае истинности проверяемого условия. Перечень этих функций приведен в табл. 4.1.
Функция | Проверяемое условие |
---|---|
isalnum(ch) | Является ли ch цифрой или буквой латинского алфавита |
isalpha(ch) | Является ли ch буквой латинского алфавита |
isascii(ch) | Принадлежит ли ch первой половине таблицы ASCII |
iscntrl(ch) | Принадлежит ли ch группе управляющих символов ( ch<0x20 ) |
isdigit(ch) | Является ли ch цифрой |
isgraph(ch) | Является ли ch отображаемым символом ( 0x21<=ch<=0x7E ) |
islower(ch) | Является ли ch малой буквой латинского алфавита |
isprint(ch) | Является ли ch отображаемым символом (0x20 ch 0x7E) |
ispunct(ch) | Является ли ch символом-разделителем ( iscntrl || isspace ) |
isspace(ch) | Является ли ch обобщенным пробелом ( 0x20, 0x09,0x0A,0x0D ) |
isupper(ch) | Является ли ch большой буквой латинского алфавита |
isxdigit(ch) | Является ли ch шестнадцатеричной цифрой |
В раздел type.h включены еще три функции преобразования аргумента ch. Результатом преобразования является возвращаемое значение функции:
- toascii(ch) – возвращает код, образованный 7 младшими битами ch;
- tolower(ch) – возвращает код строчной буквы, если ch является кодом заглавной буквы;
- toupper(ch) – возвращает код заглавной буквы, если ch является кодом строчной буквы.
4.5.2. Операции над строковыми данными
Для обработки строк, представленных одномерными символьными массивами, в библиотеке системных функций предусмотрено довольно много различных операций. Прототипы этих функций сгруппированы в заголовочном файле string.h и большинство их названий начинается с префикса str (от string ). Условимся о некоторых обозначениях аргументов и их типах, чтобы не повторять их в приведенной таблице:
- S, S1,S2 – указатель на символьный массив (как правило, имя массива);
- CS – указатель типа const char * (т.е. неизменяемый массив или строковая константа – источник данных);
- ch – код символа, обычно числовое значение типа int ;
- k – количество символов.
Некоторые из функций, приведенные в табл. 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=FEB ptr=14 ptr=2006