Anuncios

Bienvenidos sean a este post, hoy veremos operaciones basicas sobre char.

Anuncios

Hasta ahora podemos decir que los caracteres en ASCII son basicamente valores enteros y sobre ellos solo podremos hacer algunas cosas importantes, comencemos con dos de las mas basicas como son la declaracion y la asignacion:

signed char caracter;
Anuncios
char c1, c2, c3, c4;
Anuncios
unsigned char unByte;
Anuncios
Anuncios

Como mencionamos en algunos posts anteriores el tipo de dato lo identificaremos como char, la primer linea es la declaracion de un char de tipo signed, es decir que contendra un valor entre -128 y 127 (incluidos), si bien usamos la palabra signed no es necesaria dado que esta intrinseca en la declaracion, lo siguiente es igual a la anterior pero declarando varias variables al mismo tiempo, por ultimo declaramos una con la palabra unsigned, es decir que esta contendra valores de 0 a 127 (inclusive), tomemos las declaraciones anteriores y asignemos un valor a cada uno:

signed char caracter = 'A';
char c1 = 65;
char c2 = 'a';
char c3 = 97;
char c4 = '7';
unsigned char unByte = 7;
Anuncios

Como pueden ver separamos a las variables que declaramos juntas pero solo para entender mejor la explicaccion, comentemos cada una de ellas:

Anuncios
  • En el primer caso le asignamos la letra A y para ello debemos usar las comillas simples (‘) y no las dobles («), ya veremos porque
  • En el segundo caso pasamos el valor del caracter, en este caso es A, igual al anterior pero un poco mas dificil porque siempre sera mas facil usar el caracter que el codigo del conjunto, de todas formas el lenguaje lo convertira en base a la tabla
  • En el tercer caso volvemos a asignar una letra por lo tanto repetimos lo del primer caso
  • En el cuarto caso repetimos lo del segundo porque le pasamos el valor del caso anterior asi que tecnicamente es lo mismo
  • En el quinto caso tenemos la primera particularidad, aqui pasamos el caracter del numero 7, es decir que tendra el valor 55 del conjunto, pero representara al numero 7 en pantalla
  • El ultimo caso pasamos el valor de 7 pero en el conjunto representa a BEL y por lo tanto cuando acccedamos hara un beep en la terminal
Anuncios
Nota: 
Cuando pasamos los valores con las comillas simples son valores literales.
Anuncios

Para entender esto un poco mejor vamos a crear un ejemplo, para ello generen un archivo que llamaremos ejemplo19.c y le agregaremos el siguiente codigo:

ejemplo19.c

#include <stdio.h>

typedef unsigned char uchar;

void mostrarChar(char c)
{
	printf("c = '%c' (%d) [%#x]\n", c, c, c);
}

int main()
{
	signed char caracter = 'A';
	char c1 = 65, c2 = 'a', c3 = 97, c4 = '7';
	uchar unByte = 7;

	mostrarChar(caracter);
	mostrarChar(c1);
	mostrarChar(c2);
	mostrarChar(c3);
	mostrarChar(c4);
	mostrarChar(unByte);

	return 0;
}
Anuncios
Anuncios

Este es un ejemplo simple pero aplicaremos varias cosas, primero usaremos un typedef donde definiremos un alias uchar para unsigned char, despues definimos una funcion donde mostraremos los posibles valores de un char, para ello recibiremos uno como argumento, observen que pasaremos el caracter (c), luego su valor entero (d) y por ultimo su valor hexadecimal (x), para ello usaremos los formateadores correspondientes pero para los tres casos pasamos el mismo valor, despues en el main definimos las mismas variables que vimos anteeriormente con los mismos valores, pero en esta ocasion si lo hicimos separados por comas pero de la misma forma, despues simplemente llamaremos a la funcion con cada una de las variables antes definidas como argumentos, compilemos y veamos como es su salida mediante el siguiente video

Anuncios
Anuncios

Si observan el video podran no solo ver todos los datos que nos devuelve sino que escucharemos el «beep» del caracter en el codigo ASCII, tambien ejecute otro programa para que vean que el sonido correspondie a nuestro codigo, si se fijan veran que es el unico a cual no mostrara ningun caracter porque como dijimos son solamente de control, un tema que no comentamos porque no era el momento es que podemos aplicar operadores matematicos a los char, por ejemplo tomemos el codigo anterior y modifiquemoslo de la siguiente manera:

#include <stdio.h>

typedef unsigned char uchar;

void mostrarChar(char c)
{
	printf("c = '%c' (%d) [%#x]\n", c, c, c);
}

int main()
{
	signed char caracter = 'A';
	char c1 = 65, c2 = 'a', c3 = 97, c4 = '7';
	uchar unByte = 7;

	c1 += 10;
	c2 -= 10;
	c4 *= 2;
	unByte += 90;

	mostrarChar(caracter);
	mostrarChar(c1);
	mostrarChar(c2);
	mostrarChar(c3);
	mostrarChar(c4);
	mostrarChar(unByte);

	return 0;
}
Anuncios

En este caso utilizamos a los operadores complementarios para la suma, resta y multiplicacion, sobre cuatro variables, el resto del codigo sigue exactamente de la misma forma, compilemos y veamos como es su salida:

tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ejemplo19
c = 'A' (65) [0x41]
c = 'K' (75) [0x4b]
c = 'W' (87) [0x57]
c = 'a' (97) [0x61]
c = 'n' (110) [0x6e]
c = 'a' (97) [0x61]
tinchicus@dbn001vrt:~/lenguajes/C$
Anuncios

Como pueden observar al modifficarse el entero que indica cual es la posicion en la tabla ASCII (porque como ya mencionamos varias veces en realidad estamos trabajando con valores enteros y el lenguaje se encarga de mostrarnos el caracter) en caso de corresponder, por ultimo este codigo puede ser muy util cuando trabajemos con ASCII pero si queremos trabajar con Unicode? Aunque parezca mentira la solucion es miy simple, debemos cambiar esta linea:

void mostrarChar(char c)
Anuncios

De la siguiente forma:

void mostrarChar(int c)
Anuncios

Esto le dice al lenguaje que no debe restringuirse solamente a ASCII dado que no tendra sus limitaciones.

Anuncios

En resumen, hoy hemos visto como trabajar con caracteres, como es, como se comportan, como se definen, como se asignan, como podemos mostrarlos, por ultimo como podemos aplicar operaciones sobre los mismos, 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.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50