Ctype.h

Ctype.h

ctype.h

Стандартная библиотека
языка программирования С

ctype.h — заголовочный файл стандартной библиотеки языка программирования С, содержащий объявления функций для классификации и преобразования отдельных символов.

Содержание

Основные функции

Все перечисленные ниже функции имеют прототипы следующего вида:

int имя_функции( int );

Все эти функции принимают в качестве аргумента int-эквивалент символа и возвращают значение типа int, которое может представлять или другой символ (в случае функций преобразования), или логическое значение: 0 означает «Ложь», а отличное от нуля значение — «Истина» (это относится к функциям классификации).

Результат применения этих функций к символам с кодами 128—255 зависит от платформы и локализации.

Функции классификации

Имя функции Проверяет, является ли аргумент…
isalnum …буквой или цифрой
isalpha …буквой
iscntrl управляющим символом
isdigit …цифрой
isgraph …символом, имеющим графическое представление
islower …буквой в нижнем регистре
isprint …символом, который может быть напечатан
ispunct …символом, имеющим графическое представление, но не являющимся при этом буквой или цифрой
isspace …разделительным символом
isupper …буквой в верхнем регистре
isxdigit …цифрой шестнадцатиричной системы счисления

Функции преобразования

Имя функции Описание
tolower Преобразует аргумент в его строчный аналог (нижний регистр), если это возможно; иначе возвращается неизмененный аргумент.
toupper Преобразует аргумент в его прописной аналог (верхний регистр), если это возможно; иначе возвращается неизмененный аргумент.

Реализация функций

В большинстве библиотек языка C подпрограммы классификации используют статические таблицы поиска вместо макросов или функций. Например, создается массив из 256 восьмибитовых целых чисел, где каждый бит означает определенныое свойство символа (является цифрой, буквой и т. д.). Если бит 1 показывает, цифра данный символ или нет, то код мог бы быть записан так:

#define isdigit(x) (TABLE[x] & 1)

Ранние версии Linux использовали потенциально опасный код, подобный следующему:

#define isdigit(x) ((x) >= '0' && (x) <= '9')

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

Неправильное использование

Во всех случаях аргумент имеет тип int, причем его значение должно принадлежать диапазону значений типа unsigned int, или же быть равным значению макроконстанты EOF. Если аргумент имеет любое другое значение, поведение функций не определено.

Тип char в зависимости от реализации может быть как знаковым, так и беззнаковым. Если тип char является знаковым, то неявное преобразование в int может привести к появлению отрицательных чисел, что вызовет неопределенное поведение функции. Чаще всего происходит выход за пределы таблицы поиска и аварийное завершение программы.

//Этот код может работать некорректно.
char test = 'b';
 
toupper( 'a' );
int res = ispunct( test );

Чтобы избежать этого, используя char-аргументы, сперва явно преобразуйте их в unsigned char.

int-значения, возвращаемые функциями getchar, getc, fgetc обязательно принадлежат диапазону значений типа unsigned char (или равны EOF), поэтому здесь преобразование не требуется.

Примеры использования

//Следующий код считывает символ и преобразует его в
//число типа int, если введена цифра.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
int main () {
  unsigned char c;
  do {
    scanf( "%c", &c );
    if ( isdigit( c ) )
      printf( "You have input a number %i", atoi( &c ) );
    else
      printf( "It is not a number!" );
  } while ( c != EOF );
  return 0;
}

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "Ctype.h" в других словарях:

  • Ctype.h — Saltar a navegación, búsqueda ctype.h es un archivo de cabecera de la biblioteca estándar del lenguaje de programación C diseñado para operaciones básicas con caracteres. Contiene los prototipos de las funciones y macros para clasificar… …   Wikipedia Español

  • ctype.h — Стандартная библиотека языка программирования С assert.h complex.h ctype.h errno.h fenv.h float.h inttypes.h iso646.h limits.h locale.h math.h setjmp.h signal.h stdarg.h stdbool.h stddef.h …   Википедия

  • Ctype.h — The header ctype.h in the ANSI C Standard Library for the C programming language contains declarations for character classification functions. History Early toolsmiths writing in C under Unix began developing idioms at a rapid rate to classify… …   Wikipedia

  • Calestous Juma — (born 9 June, 1953 at Port Victoria, western Kenya) is an internationally recognized authority in the application of science and technology to sustainable development worldwide. He is Professor of the Practice of International Development and… …   Wikipedia

  • Republic of Ireland postal addresses — Postal addresses in Ireland are similar to those in many other parts of the world. Currently there is no national post code system. However, Dublin is divided into postal districts, under a system which was similar to that used in cities… …   Wikipedia

  • Seton Hall University School of Law — Established 1951 Type Private President Msgr. Robert Sheeran …   Wikipedia

  • University of Mississippi School of Law — Established 1854 Type Public Dean Richard Gershon …   Wikipedia

  • Robert L. Childers — is a judge in the Circuit Court of Tennessee for the 30th Judicial District. Judge Childers was designated by the Tennessee Supreme Court in 2003 to preside over the widely publicized Anna Mae He case. In a controversial ruling… …   Wikipedia

  • Comparison of programming languages (object-oriented programming) — Programming language comparisons General comparison Basic syntax Basic instructions Arrays Associative arrays String operations …   Wikipedia

  • Russian Empire — Infobox Former Country native name = Российская Империя (ru Cyrl) Rossiyskaya Imperiya (translit) conventional long name = Russian Empire common name = Russia| continent = Eurasia status = Empire government type = Monarchy| year start = 1721 year …   Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»