Brazilian Flag American Flag

Back Home Page

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.


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