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.