Bienvenidos sean a este post, como identificar que tipo de caracter es.
Hasta aca hemos visto como trabajar con los caracteres pero hoy veremos un tema importante tambien como es averiguar el tipo de caracter, para ello en base a un caracter recibido debemos obtener si este es:
- es un caracter de control?
- es un espacio en blanco?
- es un numero o una letra?
- esta en mayuscula o no?
- es un ASCII?
Para todo esto vamos a generar un nuevo ejemplo, primero generen un nuevo archivo con el nombre de ejemplo20.c y le agregaremos primero este codigo:
ejemplo20.c
#include <stdio.h>
#include <stdbool.h>
bool esDigito(int c);
bool esEspacio(int c);
bool esDeControl(int c);
bool chequeoGrafema(int c);
bool esAscii(int c);
int main()
{
char caracter = 'A';
return 0;
}
Este es im codigo simple donde como novedad incluiremos una nueva libreria llamada stdbool.h la cual nos permite no solamente acceder al tipo bool sino tambien a algunas funciones para poder manejarlos, despues tendremos cinco prototipos para las funciones que necesitaremos para contestar las preguntas anteriores, nuestro siguiente paso sera agregar las definiciones de las funciones, estas iran detras del main, agreguemos la primera:
bool esDigito(int c)
{
if (c >= '0' && c <= '9')
return true;
return false;
}
Este metodo nos permite determinar si el elemento pasado como argumento esta en el rango de las caracteres 0 y 9, recuerden que el lenguaje los interpreta como enteros, y en caso de ser verdadero nos devuelve un true sino se cumple la condicion devolvera un false, pasemos a agregar la siguiente definicion:
bool esEspacio(int c)
{
bool bEspacio = false;
switch(c)
{
case ' ':
case '\t':
case '\n':
case '\v':
case '\f':
case '\r':
bEspacio = true;
break;
default:
bEspacio = false;
break;
}
return bEspacio;
}
En la funcion primero definiremos una variable llamada bEspacio con el valor de false, luego tenemos un switch donde evaluara los siguientes case en el mismo orden:
- Espacio en blanco
- Tab horizontal
- Nueva linea
- Tab vertical
- Nueva pagina
- Retorno del carro
En todos los case no definimos nada y lo hacemos solamente en el ultimo porque basicamente todos ellos en caso de coincidir deben asignar el valor de true a la variable definida al comienzo, el default establece el valor de false en caso de no cumplirse ninguno de las condiciones anteriores, por ultimo devolvemos el valor de la variable, pasemos a agregar la siguiente definicion mediante el siguiente bloque:
bool esDeControl(int c)
{
if (c >= 0 && c <=31)
return true;
return false;
}
Aqui tenemos algo similar a lo visto en la primera funcion pero con la diferencia que pasamos los valores que lo representan, recuerden que estos no tienen un caracter sino que son de control, y al igual que en esa funcion si esta dentro del rango devolveremos true y en caso de no cumplirse devolvera false, pasemos a agregar la definicion de la siguiente funcion:
bool chequeoGrafema(int c)
{
if (c >= 'A' && c <= 'Z')
return true;
return false;
}
En este caso lo usaremos para chequear si es mayuscula o minuscula, por esta razon volvemos a usar un esquema mas similar a la primera funcion, donde volveremos a chequear en base a los caracteres y en caso de estar en el rango devolveremos un true de lo contrario devolveremos un false, por ultimo definiremos la ultima funcion mediante el siguiente bloque:
bool esAscii(int c)
{
if (c >= 0 && c <= 127)
return true;
return false;
}
En este caso volvemos a chequear entre rangos de numeros para saber si el caracter informado esta dentro de este, en caso de ser verdadero devolvera un true de lo contrario false, solo nos resta una modificacion mas, en este caso modificaremos el main para poder llamar y mostrar el resultado de todas estas funciones, tomen todo el bloque main y cambienlo de la siguiente forma:
int main()
{
char caracter = 'A';
int chkDigito = esDigito(caracter);
int chkEspacio = esEspacio(caracter);
int chkControl = esDeControl(caracter);
int chkGrafema= chequeoGrafema(caracter);
int chkAscii = esAscii(caracter);
printf("Caracter: '%c'\n", caracter);
printf("esDigito: %s\n", chkDigito ? "Verdadero" : "Falso");
printf("esEspacio: %s\n", chkEspacio ? "Verdadero" : "Falso");
printf("esDeControl: %s\n", chkControl ? "Verdadero" : "Falso");
printf("esMayuscula: %s\n", chkGrafema ? "Mayuscula" : "Minuscula");
printf("esAscii: %s\n", chkAscii ? "Si" : "No");
return 0;
}
Aqui primero definiremos una variable de tipo char con una letra, luego definimos cinco variables donde almacenaremos la salida de las funciones que definimos anteriormente, en todos los casos pasamos la variable definida primero, por ultimo mostraremos los valores almacenados en todas las variables pero en lugar de mostrar un valor entero (1 o 0) por medio del operador condicional modificaremos el resultado a Verdadero o Falso, aunque en los dos ultimos casos mostraremos si es Mayuscula (en caso de ser verdadero) o Minuscula (falso) y Si (en caso de ser verdadero) o No (en caso de ser falso), con todo esto comentado antes de compilarlo veamos como es el codigo final:
ejemplo20.c
#include <stdio.h>
#include <stdbool.h>
bool esDigito(int c);
bool esEspacio(int c);
bool esDeControl(int c);
bool esMayuscula(int c);
bool esAscii(int c);
int main()
{
char caracter = 'A';
int chkDigito = esDigito(caracter);
int chkEspacio = esEspacio(caracter);
int chkControl = esDeControl(caracter);
int chkGrafema= chequeoGrafema(caracter);
int chkAscii = esAscii(caracter);
printf("Caracter: '%c'\n", caracter);
printf("esDigito: %s\n", chkDigito ? "Verdadero" : "Falso");
printf("esEspacio: %s\n", chkEspacio ? "Verdadero" : "Falso");
printf("esDeControl: %s\n", chkControl ? "Verdadero" : "Falso");
printf("esMayuscula: %s\n", chkGrafema ? "Mayuscula" : "Minuscula");
printf("esAscii: %s\n", chkAscii ? "Si" : "No");
return 0;
}
bool esDigito(int c)
{
if (c >= '0' && c <= '9')
return true;
return false;
}
bool esEspacio(int c)
{
bool bEspacio = false;
switch(c)
{
case ' ':
case '\t':
case '\n':
case '\v':
case '\f':
case '\r':
bEspacio = true;
break;
default:
bEspacio = false;
break;
}
return bEspacio;
}
bool esDeControl(int c)
{
if (c >= 0 && c <=31)
return true;
return false;
}
bool chequeoGrafema(int c)
{
if (c >= 'A' && c <= 'Z')
return true;
return false;
}
bool esAscii(int c)
{
if (c >= 0 && c <= 127)
return true;
return false;
}
Ahora si podemos pasar a compilar y ejecutar para ver como es su salida:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ejemplo20
Caracter: 'A'
esDigito: Falso
esEspacio: Falso
esDeControl: Falso
esMayuscula: Mayuscula
esAscii: Si
tinchicus@dbn001vrt:~/lenguajes/C$
Como pueden ver funciono perfectamente, ahora vamos a modificar la siguiente linea:
char caracter = 'A';
De la siguiente forma:
char caracter = '\t';
Si lo compilamos y ejecutamos veremos esta nueva salida:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ejemplo20
Caracter: ' '
esDigito: Falso
esEspacio: Verdadero
esDeControl: Verdadero
esMayuscula: Minuscula
esAscii: Si
tinchicus@dbn001vrt:~/lenguajes/C$
En resimen, hoy hemos visto como podemos obtener infromacion de los caracteres, desde si pertenecen o no a la tabla ASCII, si pertenece a diferentes rangos, algunos estados del msmo, como si es mayuscula o minuscula, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
