Classificação de personagem C - C character classification

C classificação de caracteres é uma operação fornecido por um grupo de funções na biblioteca padrão ANSI C para a linguagem de programação C . Essas funções são usadas para testar caracteres para associação em uma classe particular de caracteres, como caracteres alfabéticos, caracteres de controle, etc. Tanto caracteres de byte único quanto caracteres largos são suportados.

História

Os primeiros programadores da linguagem C trabalhando no sistema operacional Unix desenvolveram expressões idiomáticas de programação para classificar caracteres em diferentes tipos. Por exemplo, para o conjunto de caracteres ASCII , a seguinte expressão identifica uma letra, quando seu valor é verdadeiro :

('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')

Como isso pode ser expresso em várias formulações, tornou-se desejável introduzir formas curtas e padronizadas de tais testes que foram colocadas no arquivo de cabeçalho de todo o sistema ctype.h .

Implementação

Ao contrário do exemplo acima, as rotinas de classificação de caracteres não são escritas como testes de comparação. Na maioria das bibliotecas C, eles são escritos como pesquisas de tabela estática em vez de macros ou funções.

Por exemplo, uma matriz de 256 inteiros de oito bits, organizados como campos de bits, é criada, onde cada bit corresponde a uma propriedade particular do caractere, por exemplo, isdigit, isalpha. Se o bit de ordem mais baixa dos inteiros corresponder à propriedade isdigit, o código pode ser escrito como

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

As primeiras versões do Linux usavam um método potencialmente defeituoso semelhante ao primeiro exemplo de código:

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

Isso pode causar problemas se a variável x tiver um efeito colateral . Por exemplo, se alguém chama isdigit (x ++) ou isdigit (run_some_program ()) . Não é imediatamente evidente que o argumento para isdigit seja avaliado duas vezes. Por esse motivo, a abordagem baseada em tabela é geralmente usada.

Visão geral das funções

As funções que operam em caracteres de byte único são definidos em ctype.h ficheiro de cabeçalho ( CCTYPE em C ++). As funções que operam em caracteres de largura são definidos em wctype.h ficheiro de cabeçalho ( cwctype em C ++).

A classificação é avaliada de acordo com o local efetivo.


Personagem de byte

Caráter amplo
Descrição
isalnum iswalnum verifica se o operando é alfanumérico
isalpha iswalpha verifica se o operando é alfabético
islower iswlower verifica se o operando está em minúsculas
isupper iswupper verifica se o operando está em maiúsculas
isdigit iswdigit verifica se o operando é um dígito
isxdigit iswxdigit verifica se o operando é hexadecimal
iscntrl iswcntrl verifica se o operando é um caractere de controle
isgraph iswgraph verifica se o operando é um caractere gráfico
isspace iswspace verifica se o operando é espaço
isblank iswblank verifica se o operando é um caractere de espaço em branco
isprint iswprint verifica se o operando é um caractere imprimível
ispunct iswpunct verifica se o operando é pontuação
tolower towlower converte o operando em minúsculas
toupper towupper converte o operando em maiúsculas
N / D iswctype verifica se o operando cai em uma classe específica
N / D towctrans converte o operando usando um mapeamento específico
N / D wctype retorna uma ampla classe de caracteres para ser usada com iswctype
N / D wctrans retorna um mapeamento de transformação para ser usado com towctrans

Referências

links externos