Tengo que hacer un programa que verifique si una cadena se encuentra dentro de otra ( sin usar la función strstr() ).
La aproximación que tomas esta mal ya que si sucede una coincidencia parcial, por ejemplo si buscas "aab" en "aaab", los caracteres no se vuelven a verificar (en el ejemplo la búsqueda debe continuar a partir del segundo carácter).
Si la cadena es "s" y la subcadena a buscar es "t" la forma mas sencilla (fuerza bruta) es verificando cada posición de "s", por cada una revisas si los caracteres coinciden con la subcadena "t".
Un ejemplo de ello sencillo y sin funciones:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *s = "anita lava la tina";
char *t = "tina";
int i;
int j;
for (i = 0; s[i] != '\0'; i++){
for (j = 0; s[i + j] == t[j] && t[j] != '\0'; j++)
;
if (t[j] == '\0')
printf("Coincidencia en la posicion %d\n", i
); }
return EXIT_SUCCESS;
}
SEGURAMENTE HAYA MÁS FALLOS
Me temo que si. Algunos de ellos:
* La variable "tamanio" la declaras como solo lectura (calificador const) y después la utilizas para almacenar ahí un valor con scanf. Elimina ese calificador.
* Cuando se utiliza un bucle para descartar el resto de la linea debes verificar el caso de error o fin de archivo, ese bucle hay que cambiarlo a:
while ((c
= getchar()) != EOF
&& c
!= '\n') ;
* Cuando declaras un array e indicas el numero de elementos mediante un valor calculado en tiempo de ejecución (tu caso con los arrays "cadenaOriginal" y "cadenaABuscar") si es valido depende del compilador.
* No utilices "truquitos" como este:
printf("Definir tama%co aproximado de la cadena: ", 164);
Para imprimir caracteres fuera del juego de caracteres ASCII porque los entornos de edición y ejecución dependen de la implementación. En buen cristiano caracteres como la 'ñ' no están garantizados (evitalos salvo una buena razón).
Un saludo