Classificação de personagem C - C character classification
Biblioteca padrão C |
---|
Tópicos gerais |
Diversos cabeçalhos |
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