Funções de caracteres


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).

Nesta página, veremos uma biblioteca que lida exatamente com caracteres individuais, a biblioteca ctype.h, própria da linguagem C, que tem seu correspondente em C++ como cctype. Dentre as funções encontradas nesta biblioteca há aquelas 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 as mais comuns que são para converte 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;
}





Comentários

Copyright © 2018 Anderson Bravo
www.andersonbravo.com.br
anderson@andersonbravo.com.br