Buscar string en Matriz [Solucionado]

Iniciado por ;c1v!c, 23 Enero 2012, 16:36 PM

0 Miembros y 1 Visitante están viendo este tema.

;c1v!c

Hola tengo este codigo mas o menos y necesito buscar el string en la matriz y que me diga si esta o no, una palabra en la matriz.

#include <stdio.h>
#include <stdlib.h>

int main()
{
int i,j,name;
char nino[]="";
char vec[6][6]={"agus","pepe","zazu","juan","luca"};
//-------------CARGAMOS NOMBRES DE NIÑOS-----------------//


//-------------INGRESE NOMBRE A BUSCAR-----------------//

printf("\nIngrese el nombre que desea buscar:");
gets(nino);


printf("\n[%s]\n",nino);

//-------------BUSCAMOS NOMBRE EN VECTOR-----------------//
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
????¿?¿??¿
????¿?¿??¿
}
}
return 0;
}

soyloqbuskas

Buenas ;c1v!c

Debes proporcionar mas informacion para que podamos ayudarte. Concretamente necesito saber si la palabra puede estar en horizontal, en vertical, en diagonal, del derecho y del revés, ya que todo esto hace que el codigo que hay en el bucle sea mas extenso o no....
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

;c1v!c

#2
las palabras estan en horizontal creo.

Se me ocurre algo de q "Mientras no sea \0 q siga ejecutando hasta guardar el string y despues compararlo con el ingresado para ver si esta en la lista o no, o algo asi"

tengo este codigo q modifique recien y me muestra las palabras.

#include <stdio.h>
#include <stdlib.h>

int main()
{
int i,j,name;
char nino[]="";
char vec[5][5]={"agus","pepe","zazu","juan","luca"};
//-------------CARGAMOS NOMBRES DE NIÑOS-----------------//


//-------------INGRESE NOMBRE A BUSCAR-----------------//

printf("\nIngrese el nombre que desea buscar:");
gets(nino);


printf("\n[%s]\n",nino);

//-------------BUSCAMOS NOMBRE EN VECTOR-----------------//
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
printf("%c",vec[i][j]);

}
printf("\n");
}

printf("%c\n",vec[4][5]);
return 0;
}

rir3760

El primer error en el programa es declarar el array "nino" de esta forma:
char nino[]="";
Ya que ello es equivalente a:
char nino[] = {'\0'};
Donde se declara un array que puede almacenar un único carácter. En su lugar debes declarar el array indicando su numero de elementos y sin inicializar (ya que lo primero que haces con la variable es asignarle un valor mediante la función "gets" que, para empezar deberías evitar).

Y si no se trata de una sopa de letras solo tienes que utilizar un bucle para procesar todas las cadenas del array, por cada una utilizas la función "strcmp" (prototipo en <string.h>) para verificar si coincide con la buscada o no.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

;c1v!c

#4
llegue a este codigo a ver si me dicen q estoy haciendo mal
o cual es mi error.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int i,j,k;
int ok=0;
char name[6];
char nino[6];
char vec[5][5]={"agus","pepe","zazu","juan","luca"};

//-------------INGRESE NOMBRE A BUSCAR-----------------//

printf("\nIngrese el nombre que desea buscar:");
fgets(nino, 6, stdin);
if (nino[strlen(nino)-1] == '\n');
nino[strlen(nino)-1] = '\0';

//-------------BUSCAMOS NOMBRE EN VECTOR-----------------//
for(i=0;i<5;i++)
{
for(k=0,j=0;j<5;j++)
{
if(vec[i][j]!='\0')
name[k++]=vec[i][j];
printf("%c",vec[i][j]);
}
printf("\n");
if(name==nino)
{printf("\tEl nombre si se encuentra en la lista\n");
ok=1;}
}
if(ok!=1)
printf("\tEl nombre no esta en la lista\n");


return 0;
}

Akai

A primera vista, y no me he parado a revisar todo el código, en C no puedes comparar cadenas asi:

if(name==nino)

Usa strcmp para ello:

http://cplusplus.com/reference/clibrary/cstring/strcmp/

;c1v!c

probe la funcion de la siguiente manera como estaba en el ejemplo pero nose por q no funciona.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int i,j,k;
int ok=0;
char name[6];
char nino[6];
char vec[6][6]={"agus","pepe","zazu","juan","luca"};

//-------------INGRESE NOMBRE A BUSCAR-----------------//

printf("\nIngrese el nombre que desea buscar:");
fgets(nino, 6, stdin);
if (nino[strlen(nino)-1] == '\n');
nino[strlen(nino)-1] = '\0';

//-------------BUSCAMOS NOMBRE EN VECTOR-----------------//
for(i=0;i<5;i++)
{
for(k=0,j=0;j<5;j++)
{
if(vec[i][j]!='\0')
{name[k++]=vec[i][j];
printf("%c",vec[i][j]);}
}
if(strcmp (nino,name) == 0)
{printf("\tEl nombre si se encuentra en la lista\n");}
printf("\n");
}


// if(ok!=1)
// printf("\tEl nombre no esta en la lista\n");


return 0;
}

rir3760

El error se debe a que al copiar el nombre en el array "name" no agregas el indicador de fin de cadena (el '\0'), justo después del bucle interno. Con el cambio:
for (k = 0, j = 0; j < 5; j++) {
   if (vec[i][j] != '\0') {
      name[k++] = vec[i][j];
      printf ("%c", vec[i][j]);
   }
}
name[k] = '\0';

/* ... */


Sin embargo ese bucle no es necesario ya que puedes hacer la comparación directamente, con un solo bucle:
for (i = 0; i < 5; i++)
   if (strcmp(nino, vec[i]) == 0)
      printf ("El nombre %s si se encuentra en la lista\n", nino);


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

;c1v!c

Bueno lo consegui aca les dejo el codigo para que lo vean y el que necesite tenga una idea de como hacerlo, espero que les sirva.
Gracias a todos por responder!!!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int i,j,k;
int ok=0;
char name[6];
char nino[6];
char vec[6][6]={"agus","pepe","zazu","juan","luca"};

//-------------INGRESE NOMBRE A BUSCAR-----------------//

printf("\nIngrese el nombre que desea buscar:");
fgets(nino, 6, stdin);
if (nino[strlen(nino)-1] == '\n');
nino[strlen(nino)-1] = '\0';

//-------------BUSCAMOS NOMBRE EN VECTOR-----------------//
for(i=0;i<5;i++)
{
for(k=0,j=0;j<5;j++)
{
printf("%c",vec[i][j]);
if (strcmp(nino, vec[i]) == 0)
    ok=1;
}
printf("\n");
}
if(ok!=0)
printf ("\t|| El nombre [%s] si se encuentra en la lista ||\n", nino);
else
printf ("\t|| El nombre [%s] no esta ||\n", nino);

return 0;
}