Bienvenidos sean a este post, hoy veremos un tema particular.
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" };
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]);
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;
}
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$
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.
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.


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