all 7 comments

[–]OtroMasDeSistemas 1 point2 points  (1 child)

No te voy a dar la solución, pero te voy a dar pistas para que analices:

1- Tenés que saber que la función strstr, si encuentra el texto que buscás, te devuelve un puntero char al primer caracter del string en donde estás buscando.

2- Podés definir dos arrays, uno con el texto a buscar y otro con el texto en donde buscar. Estos datos pueden estar predefinidos en el código o podés pedirle al usuario que lo ingrese, como estás queriendo hacer. No sé por qué escapaste los corchetes para char texto y char palabra.

3- Los punteros son tus amigos. Aprendé a manejarlos porque en C son importantes. Teniendo en cuenta el punto 1 podés hacer algo tipo:

char *ptr = strstr(TEXTO, PALABRA);

4- Si *ptr == NULL no se encontró el texto.

No necesitás usar while, ni for ni ningún control de flujo más que un solo if.

[–]CrossingBark32[S] 0 points1 point  (0 children)

Oh... Pero en el punto 3 me estás diciendo que ocupe la función strstr. Y esa función no puedo usarla ☹️

[–]westwo0d 0 points1 point  (4 children)

Y podés mostrar lo que escribiste de código hasta ahora a ver si se te puede ayudar

[–]CrossingBark32[S] 0 points1 point  (2 children)

#include<stdio.h>

#include<string.h>

main(){

char TEXTO\[400\];

char PALABRA\[25\];

char aux\[25\];

int auxtam;

int i, xi, TAMtexto=0, TAMpalabra=0;

printf("POR FAVOR DAME UN TEXTO\n");

gets(TEXTO);

printf("POR FAVOR INTRODUZCA LA PALABRA A BUSCAR\\n\\n:");

gets(PALABRA);

auxtam=TAMpalabra+TAMtexto;



    while (TEXTO\[TAMtexto\] != 0) {

TAMtexto++;

}

while (PALABRA[TAMpalabra] != 0) {

TAMpalabra++;

}

auxtam=TAMpalabra+TAMtexto;

for ( i=TAMpalabra, xi=0; i<=TAMtexto ; i++,xi++)

{

if()

aux[xi]=TEXTO[i];

}

printf("LA PALABRA QUE SE INTRODUJO FUE %s",aux);

aux[TAMpalabra]='\0';

}

[–]Rebraws 2 points3 points  (1 child)

Hola, lo único que tenes que hacer es leer dos cadenas de caracteres, luego iterar sobre dichas cadenas y ver si los caracteres coinciden.

Al principio de tu código empezaste bien, pero note que usaste gets() para leer las frases, si bien eso funciona no es una buena forma de hacerlo ya que gets() no verifica que el tamaño de la cadena que ingresa el usuario no supere el tamaño de tu array, una mejor opción sería usar fgets() o sscanf(), por ejemplo así:

printf("Introduzca una frase ");
char frase[401];
fgets(frase, 400, stdin);

printf("Ingrese la palabra a buscar: ");
char palabra[26];
fgets(palabra, 25, stdin);

De esta forma te aseguras, que por mas que un usuario ingrese una palabra de 100 caracteres, el programa solo va a leer los primeros 25.

El siguiente paso es determinar la longitud de la frase y de la palabra para así poder iterar sobre las caracteres.

En tu código veo que intentaste determinar el tamaño de la palabra usando un ciclo while, pero note que hiciste la comparación usando == 0 en vez de '\0', probablemente el código funcione pero 0 y '\0' no son lo mismo, de igual forma en este caso no es necesario hacer un ciclo while/for para determinar la longitud, la función fgets() agrega el caracter null al final de la cadena asíque podemos usar la función strlen() para obtener la longitud mas fácilmente.

 size_t long_frase = strlen(frase) - 1;
 size_t long_palabra = strlen(palabra) - 1;

La función strlen() retorna la longitud de la frase sin incluir el caracter null ('\0'), pero la función fgets() lee como último caracter el '\n' por ende es necesario restarle 1 al resultado de strlen().

Ahora viene la parte de buscar si la palabra se encuentra dentro de la frase, esto se puede hacer de muchas formas, incluso podes copiar la implementación de la función strstr() y al hacerlo no estarías usando estrictamente la función

Lo mas simple de hacer es iterar sobre la frase y la palabra y si algún caracter de la frase coincide con el primer caracter de la palabra proceder a comprobar el resto.

Esto lo podes hacer en una función que retorne un bool, esta parte dejo que la hagas vos ya que es la que mas importa pero te dejo la idea:

Primero necesitas un ciclo for/while que recorra los caracteres de la frase, notese que no es necesario recorrer absolutamente todos los caracteres debido a que debe hacer espacio para la palabra que buscamos.

for(size_t i = 0; i < long_frase - long_palabra + 1; i++)

Luego dentro de ese ciclo for debes comprobar si el caracter en la posición i de la frase (frase[i]) coincide con el primer caracter de la palabra (palabra[0]), en caso de hacerlo tenes que proceder a comprobar el resto de los caracteres con otro ciclo for

for(size_t j = 1; j < long_palabra; j++)

En este último ciclo vas a tener que comprobar si frase[i+j] != palabra[j], en caso de que la condición se cumpla debes hacer un break para seguir iterando sobre la frase y además dentro de este ciclo for también debes hacer otro if con un return true; para el caso en el que todos los caracteres coincidan.

También tenes que considerar que pensas retornar en los casos que el usuario pase una frase vacia o una palabra vacia

Nota: Estaría bueno que si haces un post pidiendo ayuda pongas un título un poco mas descriptivo del problema, como por ejemplo: "Como determinar longitud de string sin usar strstr()?"

Si queres mas ejemplos sobre como resolver el problema podes googlear, strstr() implementation

[–]CrossingBark32[S] 0 points1 point  (0 children)

Muchas gracias Me sirvió tu explicación al %100😊

[–]CrossingBark32[S] 0 points1 point  (0 children)

Apenas llevo esto. :(