UTNianos

Versión completa: [Strings] Crear la funcion strstr
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola gente como andan?

Bueno estoy teniendo serios problemas con re-crear la función strstr. Estuve pensando como tendria que funcionar pero no lo puedo plasmar en un código. Lo que pensé fue lo siguiente (espero ser claro con mi explicación):

Creo 2 strings, String_a y String_b, de X tamaño (solo para ejemplificar). Decido (por convención) de buscar en el String_b, el String_a (por ende me limitare a escribir en el String_a una palabra mas corta que en el String_b). Luego en la función (la cual devuelve un puntero a char, es decir, la dirección de memoria del comienzo de la palabra de String_a, encontrada en el String_b), creo un while anidado, en donde en el while exterior habrá un puntero que se movera (recorrerá) el String_a y el while interior otro puntero que recorrerá el String_b. La idea es que en el while donde esta el puntero que recorre el String_b, se compare el valor de lo que hay en esa posición del String_b con el valor que hay en la misma posición del String_a y que si hay coincidencia, ambos punteros se desplacen en 1 posición. Si no hay coincidencia, que solo el puntero del while interior (nuevamente, el que apunta al String_b) se desplace. Repetir esto hasta que se complete la palabra con las coincidencias y finalmente devolver mediante un return la dirección de memoria de la primer letra que coincidió en las continuas coincidencias. Es medio dificil de explicar, creo que conceptualmente lo tengo pero no se aplicarlo.

Quien me hace magia y me lo deja resuelto? Muchas gracias!
ya lo hice ese ejercicio, es facil. Lo que tenes que hacer es detectar si el string 2 este dentro del 1. Para hacer esto tenes que ver que cada elemento del string 2 este en el 1.
Ejemplo.
Str1= "hola mundo"
Str2= "alo mun"

te vas fijando si str2[j]=str[i] hasta que str[j]= '\0'

Espero que esto te ayude

Y si str1[i] = '\0' entonces no son iguales
Acabo de ver el post en Facebook, hice un codigo rapido que hace lo que buscas. Seguro no es el optimo, y debe tener algun que otro error puntual, pero como para que te des una idea:



#include <stdlib.h>
#include <stdio.h>
int encontrar(char [], char []);
main(){
if (encontrar("foro", "hola, foro!!!")) printf("Encontrado\n");
else printf("No se ha encontrado el string\n");
system("PAUSE");
}

int encontrar(char s1[], char s2[]){ /* Encontrar s1 en s2 */
int pos=0;
for (;*s1 != '\0' && *s2 != '\0';s2++,pos=0){
for(;s1[pos] == s2[pos] && s1[pos] != '\0';pos++);
if (s1[pos] == '\0'){
return 1;
}
}
return 0;
}


Tiro una posible solución.



/**
* \fn bool my_strstr(char *big, char *sub);
* \brief Compara el conjunto y el posible subconjunto.
* \author
* \date
* \param Entradas de s1 y s2.
* \return Retorna un valor según su condición de verdad.
*/

bool my_strstr(char *big, char *sub){

int i,j;
int ret=0;
for (i=0,j=0;big[i]!=0 && sub[j]!=0;i++){
if(big[i] == sub[j]){
ret = true;
j++;
}
else{
j = 0;
ret = false;
}
}
return (ret);
}

Gracias a ambos por sus respuestas.

Maxy -> El codigo no me sirve, pues la funcion no esta devolviendo una direccion de memoria.

Feer -> Lo mismo para vos, tine que devolver una direccion la funcion, no un 1 un 0. Y esa direccion debe ser la de la primera letra de la palabra encontrada en el s2, es decir:

Si mi S1 es

S1 = ola

y mi S2 es

S2 = Hola

La situacion deberia ser algo asi:

[Imagen: t1e.png]

¿Se entiende?
Usa el de cualquiera de ellos cambiando el return y listo.

Para evitar estas cosas esta bueno poner el prototipo de la funcion.
y si sabes lo que tiene que hacer porque no lo haces?

te van a romper el orto si seguis asi. nunca te dijeron qeu deberias dejar de plantear problemas y empezar a plantear soluciones?


lo grueso del programa ya te lo pasaron, tambien lo podias googlear. simplemente te falta modificar apenas el programa (no pueden ser mas de 2 o 3 lineas)
Qué bajon, siempre crei que la strstr devolvía 1 si estaba 0 si no...
Es mas hice el TP de string de la guía 2010 y ahí la consigna decía eso.

En fin, fijate si modificando un poco sale si no el finde me fijo.
(26-06-2013 22:26)Feer escribió: [ -> ]Qué bajon, siempre crei que la strstr devolvía 1 si estaba 0 si no...
Es mas hice el TP de string de la guía 2010 y ahí la consigna decía eso.

En fin, fijate si modificando un poco sale si no el finde me fijo.

Gracias =)
mirá, tenes el largo del string 2, y cuando terminas la comparacion estas parado en el final de la comparacion dentro del string 1, entonces podes devolverle la posicion i - el largo del string 2, ahi va a ser la posicion que tenes devolver.
URLs de referencia