SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: emeap en Martes 2 de Junio de 2009, 12:30

Título: Comparando cadenas en un array de cadenas
Publicado por: emeap en Martes 2 de Junio de 2009, 12:30
Buenas, tengo un problema con un ejercicio en el cual hay que buscar una cadena (previamente declarada en el main) en un array de cadenas, y finalmente mostrar el numero de coincidencias...

Tengo el siguiente código:

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <conio.h>
  6.  
  7. #define MAX_TAM 5 //Constante que define la longitud máxima de la cadena
  8.  
  9. //Declaración de las funciones
  10. int devolver_coincidencias(char *array_nombres[], char *nombre);
  11. void visualizar(int contador);
  12.  
  13. //Main
  14. int main()
  15. {
  16.     int contador;
  17.     char *array_nombres[] = {"pedro garcia","pedro","miguel"}; //Iniciacion de las cadenas
  18.     char *nombre = {"pedro"};
  19.     contador = devolver_coincidencias(array_nombres,nombre);
  20.     visualizar(contador);
  21.     printf("n");
  22.     system("pause");
  23. }
  24.  
  25. //Funcion que devuelve el numero de coincidencias dentro del array de cadenas
  26. int devolver_coincidencias(char *array_nombres[], char *nombre)
  27. {
  28.     int a = 0; //Variable que se va moviendo por el array de cadenas
  29.     int contador = 0;
  30.     if(strlen(array_nombres[a]) == MAX_TAM) //Compara el tamaño buscado con el de la cadena del array
  31.     {
  32.              if(strcmp(nombre,array_nombres[a]) == 0) //Compara las cadenas
  33.              {
  34.                                               contador++; //Si son iguales, aumenta el contador
  35.              }
  36.     }
  37.     else
  38.     {
  39.         a++; //Sino va al siguiente elemento del array de cadenas
  40.     }
  41.     return contador; //retorna el valor del contador
  42. }
  43.  
  44. //Funcion que visualiza el numero de cadenas repetidas en el array
  45. void visualizar(int contador)
  46. {
  47.      printf("La cadena esta repetida %d veces", contador);
  48.      getch();
  49. }
  50.  
  51.  

Me sería de gran ayuda cualquier aporte. Gracias ^_^
Título: Re: Comparando cadenas en un array de cadenas
Publicado por: m0skit0 en Martes 2 de Junio de 2009, 12:45
No entiendo cuál es el problema ni que aporte esperas  :P
Título: Re: Comparando cadenas en un array de cadenas
Publicado por: Eternal Idol en Martes 2 de Junio de 2009, 12:51
Primero contador en el main nunca se inicializa, supongo que queres esto ahi:

Código: Text
  1. contador = devolver_coincidencias(array_nombres,nombre);
  2.  

devolver_coincidencias no funciona para nada, el if del strlen hace que solo compare cuando la cadena tenga un tamaño menor o igual a 5 con lo cual el primer nombre es ignorado. Ademas no hay un bucle como para que compare mas de una palabra, solo compara la primera, vas a tener que establecer una forma de pasarle (o detectar si usas un NULL en el array) el tamaño del array.
Título: Re: Comparando cadenas en un array de cadenas
Publicado por: emeap en Martes 2 de Junio de 2009, 12:58
He corregido un poco el código de fallos garrafales que he visto. Tengo una duda, para comparar "pedro" con "pedro garcia", ¿tendría que hacerlo con un bucle letra por letra comparando hasta el espacio por ejemplo?
Título: Re: Comparando cadenas en un array de cadenas
Publicado por: Eternal Idol en Martes 2 de Junio de 2009, 13:13
Si queres que encuentre "pedro" dentro de "pedro garcia" mejor usa strstr.