C/Visual C - switch & enum con tipos *char ó char [].

 
Vista:

switch & enum con tipos *char ó char [].

Publicado por Europio Costalino (1 intervención) el 07/08/2005 21:13:02
Amigos, conocen alguna forma de utilizar en C++ las instrucciones enum o switch o alguna otra manera de que validen o utilicen tipos char, por ejemplo:

switch (option)
{
case 1: break;
case 2: break;
case 3: break;
...
}

por este ejemplo:

switch (nombre)
{
case "Juana": break;
case "Rodolfo": break;
}

Porque es obvio que el segundo caso manda un error de sintaxis, pero tengo tantos if's en unas funciones que lamentablemente para optimizar código quisiera otra manera de validar estos arreglos de caracteres sin tener que utilizar "IF's" o bien con los enum

enum Nombres
{
Juana="Juana";
Rodolfo="Rodolfo";
}

O conocen alguna forma de hacerlo?

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:switch & enum con tipos *char ó char [].

Publicado por fernando.gomez (1603 intervenciones) el 08/08/2005 04:21:46
No pus no. Le estás pidiendo peras al olmo.

La idea de emplear enumeraciones es buena, pero éstas no pueden ser sino números enteros. Creo que te vas a tener que quedar con los if's.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:switch & enum con tipos *char ó char [].

Publicado por El Mogur (202 intervenciones) el 09/08/2005 23:57:42
De todas formas, si tienes muchos if's, en algunas ocasiones, se puede evitar utilizando una tabla hash... claro, que depende de qué hagas en cada "case".
Por ejemplo, si es algo como:

case "Rodolfo":
salario = 30; break;
case "Juana":
salario = 40; break;

puedes usar una tablas hash (stl::map), que tenga como clave los nombres, y como dato el salario. Y luego lo recuperas sin if's.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:switch & enum con tipos *char ó char [].

Publicado por Franco Cedillo (4 intervenciones) el 10/08/2005 01:17:46
Hola,

No conozco aún las tablas hash. Pero si entiendo el concepto, si la solución está por el lado del método hashing es más una búsqueda, un recuperar datos. Ahora el Hash es sumamente potente cuando involucra tablas que tengan algún ordenamiento matemático por ejemplo un mapa de caractéres y variantes de cada caracter, así como una matriz y ubicar fila y columna con una FÓRMULA de Hasing. La idea es bastante buena, pero siempre es mejor saber el caso completo o datos que nos ayuden a elegir el procedimiento idóneo. En el trabajo de condicionales he realizado optimizaciones estudiando los operadores lógicos que uso, agrupando en or exclusivo, en and negados, combinaciones.... Pero lo que más redujo código son las funciones de validación, booleanos que verifican en qué caso te encuentras y efectúan una acción. Este trabajo tiene antes que todo un principio.. si vale la pena hacer todo ese trabajo es un contrapeso entre tamaño de la información, y qué tanto se puede agrupar... algo que siempre he visto es lo de los meses de año... son 12 y para imprimirlos necesariamente hay que declarar las 12 cadenas que nombran a cada mes... poner a analizar que algunos meses terminan en "embre" (dieciembre, noviembre...) y sacar eso del case para hacerlo a aparte es complicar más.. a ninguno se le ocurre eso...

qué estructuras de datos usas, Europio? son de tipo enumerado?

saludos...

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:switch & enum con tipos *char ó char [].

Publicado por Europio Costalino (1 intervención) el 13/08/2005 04:36:41
Agradezco el tiempo que se han tomado en responderme.

Miren, la situación es que la mayoría de los programas que me han solicitado depurar y optimizar tienen una gran cantidad de IF's haciendo alusión a la función strcmp, de tal suerte que tengo IF's de la forma siguiente:

if (strcmp(nombre, "Juliana"))
... Acciones
else if (strcmp(nombre, "Rodolfo"))
....Acciones

Es decir, que tengo constantes de caracteres (o mejor dicho const char *) pero muy específicas, pero así como en el ejemplo les hablo de docenas de IF's anidados que han hecho al código inestable y rebuscado. Se me ha ocurrido por el momento crear un archivo de texto y almacenar las constantes en éste, de tal forma que con una función en C devuelva si el nombre tecleado está dentro del archivo. Algo similar a ésto:

int EncuentraDato(const char *campobusq)
{
FILE *pArch=NULL;
int encontrado=0;
struct Registro Reg;

if (pArch=fopen("archivo.txt", "r+"))
{
while (!feof(pArch && !encontrado))
{
if (fread(Reg, sizeof(Reg), 1, pArch))
{
if (strcmp(Reg.campotxt, campobusq))
encontrado++
}
}

fclose(pArchivo);
}

return encontrado:
}

Y ahora sí, puedo usar switch o enum, no obstante, hay otro pequeño inconveniente, que no tengo por qué usar espacio en disco para esto ya que está restringido :( y esto sólo me ha sacado del apuro por ahora.

Gracias y que tengan buena tarde.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar