Published
Last modified
C/C++ - Trabalhando com caracteres, a biblioteca CTYPE
Um dos fatores importantes de uma boa programação é saber lidar com os caracteres, principalmente, tratando-se da linguagem C que é case sensitive (diferencia maiúsculas de minúsculas). Neste artigo, veremos uma biblioteca que lida exatamente com caracteres individuais, o CType.

A biblioteca ctype.h, própria da linguagem C, que tem seu correspondente em C++ como cctype, possui funções que modificam o estado da letra (maiúsculas e minúsculas) e até mesmo funções que servem para descobrir se o que foi digitado é um ponto, vírgula, número, espaço, ctrl, etc.
Primeiramente, vamos às mais comuns que são para converter um caracter em letra maiúscula ou minúscula.
toupper - esta função recebe um argumento que deve ser um caracter e retorna o caracter correspondente em formato maiúsculo, se o caracter já for maiúsculo, a função não o modifica.
tolower - esta função recebe um argumento que deve ser um caracter e retorna o caracter correspondente em formato minúsculo, se o caracter já for minúsculo, a função não o modifica.
Como estas funções retornam resultados, estes resultados devem ser guardados dentro de variáveis. A melhor parte que podemos fazer isso com a própria variável. Simplificando, podemos fazer a variável X receber ela mesma em maiúsculo ou minúsculo dependendo da função utilizada. Vejamos o exemplo:
#include <iostream>
#include <cstdlib>
#include <cctype>
//corresponde a ctype.h da linguagem C
using namespace std;
int main (void){
char letra;
cout <<"Digite um caracter: ";
cin >> letra;
cin.ignore();
letra=toupper (letra);
cout <<"A representacao maiuscula do que voce digitou e -> "<<letra;
letra=tolower (letra);
cout <<"\nA representacao minuscula do que voce digitou e -> "<<letra<<"\n\n";
system ("pause");
return EXIT_SUCCESS;
}
Pronto! Como podemos ver aqui, a letra é convertida em maiúscula e depois em minúscula. Dessa forma podemos controlar exatamente o que esperar no programa.
Além dessas funções, há também funções que retornam apenas valores booleanos, ou seja, verdadeiro ou falso (true e false) para determinado tipo de caracter. Com isso é possível fazer nosso programa reagir de maneiras diferentes para tipos de caracteres diferentes.
isalnum - verifica se o caracter ou inteiro passado como parâmetro é alfanumérico. Isso inclui todos os números e as letras do alfabeto, tanto maiúsculas quanto minúsculas.
isalpha - verifica se o caracter ou inteiro passado como parâmetro é alfabético. Isso inclui todas as letras do alfabeto, tanto maiúsculas quanto minúsculas.
isdigit - verifica se o caracter ou inteiro passado como parâmetro é um digito. Isso inclui todos os números.
ispunct - verifica se o caracter ou inteiro passado como parâmetro é uma pontuação. Isso inclui qualquer tipo de pontuação como . , ? ! ^ ' { } ~ : ;. Porém, não é capaz de verificar se uma letra é acentuada.
isspace - verifica se o caracter ou inteiro passado como parâmetro é um espaço em branco.
islower - verifica se o caracter ou inteiro passado como parâmetro é uma letra minúscula
isupper - verifica se o caracter ou inteiro passado como parâmetro é uma letra maiúscula
iscntrl - verifica se o caracter ou inteiro passado como parâmetro é um caracter de comando. Isso inclui CTRL, ALT, ENTER, BACKSPACE, etc.
isxdigit - verifica se o caracter ou inteiro passado como parâmetro é compatível com um número hexadecimal. Isso inclui todos os número (0 - 9) e qualquer letra entre A e F (não importa se minúsculo ou maiúsculo).
Agora, veja abaixo todas estas funções em uma sequência de if. Este programa determina o que é digitado pelo usuário.
#include <iostream>
#include <cstdlib>
#include <cctype>
using namespace std;
int main (void){
int letra;
cout <<"Digite uma letra: ";
letra = getchar ();
cout <<"\n\nA letra que voce digitou e:\n";
if (isalnum (letra))
cout <<"\nalfanumerico";
if (isalpha (letra))
cout <<"\nletra";
if (isdigit (letra))
cout <<"\nnumero";
if (ispunct (letra))
cout <<"\npontuacao";
if (isspace (letra))
cout <<"\num espaco em branco";
if (islower(letra))
cout <<"\nminusculo";
if (isupper(letra))
cout <<"\nmaiusculo";
if (iscntrl(letra))
cout <<"\nbotao de controle";
if (isxdigit(letra))
cout <<"\ncapaz para escrita em hexadecimal";
cout <<"\n\n";
system ("pause");
return EXIT_SUCCESS;
}
Este programa mostra bem o que cada uma das funções faz. Como todas são funções booleanas, então, colocamos todas elas dentro dos if. Se for verdadeiro executa a linha logo abaixo. Pronto, este é o começo para mais adiante lidarmos com cadeias de caracteres que são as strings.

C/C++ - Trabalhando com caracteres, a biblioteca CTYPE by Denys Xavier is licensed under a Creative Commons Attribution 4.0 International License.