Dev - C++ - Buscar String en matriz Char

 
Vista:
Imágen de perfil de Rojas

Buscar String en matriz Char

Publicado por Rojas (5 intervenciones) el 02/06/2018 03:05:49
Hola, hice un metodo que me busca una palabra en una matriz char, para eso primero converti la palabra a char y la metí en un vector:

1
2
3
4
5
6
char stringAChar(string palabra){
    for(int i=0; i<palabra.length(); i++){
        vector[i]=palabra[i];
        cout<<vector[i]<<endl;
    }
}

Despues de eso hice el metodo para buscar ese vector en la matriz, mi problema es que este metodo, solo busca la primera letra que aparezca, por ejemplo: El vector tiene la palabra HOLA, y la matriz esta acomodada de la siguiente forma:

a s d f H g d
O i k H O L A
a s c b r w t

Entonces, el metodo me da la posición de la primera H y O y no la H y O de la palabra, alguien por favor me puede ayudar a mejorar mi metodo para que esto no pase, por favor.

1
2
3
4
5
6
7
8
9
10
11
int buscaDerecha(int filas, int columnas){
    k=0;
    for (int i = 0; i<filas;i++){
        for (int j = 0; j<columnas; j++){
            if(matriz[i][j]==vector[k]){
                k++;
                cout<<"La palabra inicia en la posicion: ["<<i<<"]["<<j<<"] y continua hacia la derecha"<<endl;
            }
        }
    }
}

Necesito una forma de descartar las letras iguales pero que no sean parte de la palabra y luego de comprobar que esta en esa fila, me de solamente la posición de la primera letra y no la de todas. Por favor alguien que me ayude.
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
Imágen de perfil de Alejandro
Val: 25
Ha disminuido su posición en 4 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Buscar String en matriz Char

Publicado por Alejandro (9 intervenciones) el 02/06/2018 17:16:13
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Veo que sigues con la sopa de letras jejeje que bueno saber que lo intentas y no solo esperas la tarea resuelta.

Tengo algunos dias que comence a estudiar C++ y en el trabajo no tengo el compilador, te explico un poco el codigo que te deje en php

1
2
3
4
5
6
7
8
9
10
11
12
13
$len = strlen($palabra)-1; // Obtengo la longitud de la palabra buscada y resto 1 para coincidir con las posiciones del array
 
for($i=0, $rows=count($sopa); $i<$rows; $i++){ //Recorro las filas del arreglo
	for($j=0, $cols=count($sopa[$i]); $j<$cols; $j++){ //Recorro cada elemento de la fila en curso, celda
		if( $j+$len<$cols ){ // si J posicion del elemento actual+longitud de la palabra(3) es menor al limite de arreglo continuo la busqueda
			$right =""; // vacia la variable donde almacenare la palabra construida a partir de la posicion actual
			for($k=$j; $k<=$len; $k++){ //Recorro de la posicion actual hasta la suma de la posicion actual y la longitud de la palabra buscada
				$right .= $sopa[$i][$k]; //acumulo los caracteres leidos para formar una palabra temporal
			}
			if($right==$palabra){//Si la palabra temporal es igual a la palabra buscada muestro el mensaje de su posicion.
				echo "Esta en la posicion [$i,$j] hacia derecha.<br />";
			}
		}

Con tu ejemplo
la longitud de HOLA es 4 menos 1 me da el tamaño, si fuera un array H O L A = 3
Suponiendo que estamos en la fila 1 ( O i k H O L A) entonces i=1
recorremos cada elemento de la fila 1
si la posicion actual del elemento (0) + longitud de la palabra buscada (3) no exede el limite de elementos de la fila (6) continuamos
0+3=3<=6 se cumple la condicion
vaciamos la parabra temporal pues esto se repetira varias veces
recorremos de la posicion actual hasta la suma de la posicion actual y la longitud de la palabra busca (de 0 a 3)
acumulamos cada elemento para formar una palabra de la misma longitud que la palabra buscada ( O i k H )
comparamos si OikH es igual a HOLA
continuamos con los siguientes elementos
de 1 a 4 = ikHO
de 2 a 5 = kHOL
de 3 a 6 = HOLA Se encuentra la palabra
de 4 a 7 = OLA Daria error al excederce el limite de 6 por eso la condicion menor o igual al limite. El programa continua con los elementos 5 y 6 jejejeje se puede mejorar con while para que no realice estas iteraciones inecesarias y al igual se elimina la comprobacion que sea menor o igual al limite del arreglo paro hasta ahorita que analiso el codigo me doy cuenta :D
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