Bienvenidos sean a este post, hoy veremos un tema particular.

Anuncios

En realidad este tipo de array se lo denomina como una tabla de consulta (lookup table) dado que nos permite almacenar valores de tipo cadena para nuestros usos, para recuperar la informacion debemos hacerlo de la misma forma que si fuera un array unidimensional, por ejemplo si tuvieramos un array como el siguiente:

char nombre_dia[] = { "Lunes",
			"Martes",
			"Miercoles",
			"Jueves",
			"Viernes",
			"Sabado",
			"Domingo" };
Anuncios

En este caso cada dia estara relacionado a la posicion del array, por lo tanto para recuperarlo debemos usarlo de la siguiente forma:

int diaSemana = 2;
printf("%s\n", nombre_dia[diaSemana]);
Anuncios

Para entenderlo mejor vamos a tomar el ejemplo que vimos en este post y lo modificaremos, sino lo poseen simplemente generen un nuevo archivo llamado ascii.c y agreguen el siguiente codigo:

ascii.c

#include <stdio.h>

int main()
{
	int c1, c2=32, c3=64, c4=96;
	char* ctrl[] = {"NUL","SOH","STX","ETX","EOT","ENQ","ACK",
			"BEL"," BS"," HT"," LF"," VT"," FF"," CR",
			" SO"," SI","DLE","DC1","DC2","DC3","DC4",
			"NAK","SYN","ETB","CAN"," EM","SUB","ESC",
			" FS"," GS"," RS"," US"};

	printf("|Car  Dec  Hex ");
	printf("|Car  Dec  Hex |Car  Dec  Hex |Car  Dec  Hex |\n");
	printf("|--------------");
	printf("|--------------|--------------|--------------|\n");

	for(c1=0; c1 < 32; c1++, c2++, c3++, c4++)
	{
		printf("|%s %3d   %#4x", ctrl[c1], c1, c1);
		printf("|%c   %3d   %#x", c2, c2, c2);
		printf("|%c   %3d   %#x", c3, c3, c3);
		if (c4 == 127)
		{
			printf("|%s %3d   %#x|", "DEL", c4, c4);
		} else {
			printf("|%c   %3d   %#x|", c4, c4, c4);
		}
		printf("\n");
	}

	return 0;
}
Anuncios
Anuncios

Si lo analizamos con el codigo que vimos en este post ya hay unas diferencias muy importantes, la principal es la desaparicion del bloque de switch con los 32 case que utilizabamos para mostrar cada uno de los elementos de control, en este caso pasamos cada nombre de identificacion dentro del array llamado ctrl y despues por medio de cada valor asignado a c1 iremos recuperando los valores del array y estos quedaran relacionados entre si, en el resto trabaja de la misma forma que vimos en ese post pero resumiendolo, primero mostraremos los caracteres de control, los siguientes mostraran los caracteres restantes que no son otros que los caracteres imprimibles, salvo el ultmo que es DEL, por esta razon debimos usar una condicional para el rango de c4, donde en caso de que c4 valga 127 lo identificara de lo contrario mostrara el caracter correspondiente, con todo esto comentado compilemos y veamos como es su salida:

tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ascii
|Car  Dec  Hex |Car  Dec  Hex |Car  Dec  Hex |Car  Dec  Hex |
|--------------|--------------|--------------|--------------|
|NUL   0      0|     32   0x20|@    64   0x40|`    96   0x60|
|SOH   1    0x1|!    33   0x21|A    65   0x41|a    97   0x61|
|STX   2    0x2|"    34   0x22|B    66   0x42|b    98   0x62|
|ETX   3    0x3|#    35   0x23|C    67   0x43|c    99   0x63|
|EOT   4    0x4|$    36   0x24|D    68   0x44|d   100   0x64|
|ENQ   5    0x5|%    37   0x25|E    69   0x45|e   101   0x65|
|ACK   6    0x6|&    38   0x26|F    70   0x46|f   102   0x66|
|BEL   7    0x7|'    39   0x27|G    71   0x47|g   103   0x67|
| BS   8    0x8|(    40   0x28|H    72   0x48|h   104   0x68|
| HT   9    0x9|)    41   0x29|I    73   0x49|i   105   0x69|
| LF  10    0xa|*    42   0x2a|J    74   0x4a|j   106   0x6a|
| VT  11    0xb|+    43   0x2b|K    75   0x4b|k   107   0x6b|
| FF  12    0xc|,    44   0x2c|L    76   0x4c|l   108   0x6c|
| CR  13    0xd|-    45   0x2d|M    77   0x4d|m   109   0x6d|
| SO  14    0xe|.    46   0x2e|N    78   0x4e|n   110   0x6e|
| SI  15    0xf|/    47   0x2f|O    79   0x4f|o   111   0x6f|
|DLE  16   0x10|0    48   0x30|P    80   0x50|p   112   0x70|
|DC1  17   0x11|1    49   0x31|Q    81   0x51|q   113   0x71|
|DC2  18   0x12|2    50   0x32|R    82   0x52|r   114   0x72|
|DC3  19   0x13|3    51   0x33|S    83   0x53|s   115   0x73|
|DC4  20   0x14|4    52   0x34|T    84   0x54|t   116   0x74|
|NAK  21   0x15|5    53   0x35|U    85   0x55|u   117   0x75|
|SYN  22   0x16|6    54   0x36|V    86   0x56|v   118   0x76|
|ETB  23   0x17|7    55   0x37|W    87   0x57|w   119   0x77|
|CAN  24   0x18|8    56   0x38|X    88   0x58|x   120   0x78|
| EM  25   0x19|9    57   0x39|Y    89   0x59|y   121   0x79|
|SUB  26   0x1a|:    58   0x3a|Z    90   0x5a|z   122   0x7a|
|ESC  27   0x1b|;    59   0x3b|[    91   0x5b|{   123   0x7b|
| FS  28   0x1c|<    60   0x3c|\    92   0x5c||   124   0x7c|
| GS  29   0x1d|=    61   0x3d|]    93   0x5d|}   125   0x7d|
| RS  30   0x1e|>    62   0x3e|^    94   0x5e|~   126   0x7e|
| US  31   0x1f|?    63   0x3f|_    95   0x5f|DEL 127   0x7f|
tinchicus@dbn001vrt:~/lenguajes/C$
Anuncios

Como pueden ver, esta forma de mezclar arrays con cadenas nos puede facilitar muchas nuestras tareas y reducir el codigo que de a momentos puede tonarse demasiado complicado.

Anuncios

En resumen, hoy hemos visto como es un array de cadenas, como se crea, sus similitudes con otros arrays, como lo podemos recuperar y por ultimo hemos visto como modificar un ejemplo que vimos en este post donde modificamos un uso poco practico de una instruccion a otro mucho mas practico y que nos ayudo a reducir el codigo, espero les haya sido util 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

Donación

Es para mantenimento del sitio, gracias!

$1.50