Código:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
short int fBuscar(char *ptrX, char *ptrY, short int longitud); // prototipo función fBuscar
short int fBuscar(char *ptrX, char *ptrY, short int longitud)
{
short int contador1 = 0;
short int contador2 = 0;
char *ptrZ = ptrY; // usamos ptrZ como una variable auxiliar que almacena la dirección en memoria de cadenaABuscar[0]
for(; *ptrX != '\0'; ptrX++){
if(*ptrX == *ptrY){
contador1++;
contador2++;
ptrY++; // ptrY apunta a la siguiente posición de memoria
if(contador1 == longitud){
return (contador2 - longitud);
}
}
else{
ptrY = ptrZ;
contador1 = 0;
contador2++;
}
}
return (-1); // si se llega hasta aquí no se ha encontrado la cadenaABuscar en cademaOriginal
}
int main(void)
{
const short int tamanio;
int c;
printf("Definir tama%co aproximado de la cadena: ", 164);
scanf("%d", &tamanio);
while((c = getchar()) != '\n'); // limpieza del buffer
char cadenaOriginal[tamanio]; // cadena donde vamos a buscar
char cadenaABuscar[tamanio]; // cadena de caracteres que queremos ver si se encuentra en cadenaOriginal
short int longitud;
short int x; // el valor de x verifica si la cadenaABuscar se encuentra en cadenaOriginal
puts("\nIntroducir cadena donde se quiere buscar:");
fgets(cadenaOriginal, tamanio, stdin);
puts("\nIntroducir cadena que queremos buscar:");
fgets(cadenaABuscar, tamanio, stdin);
longitud = strlen(cadenaABuscar) - 1; // evitamos contar el caracter '\n' que almacena fgets()
x = fBuscar(cadenaOriginal, cadenaABuscar, longitud);
if(x == -1){
puts("Cadena no contenida");
}
else{
puts("Cadena no contenida");
printf("Encontrada en la posicion %d", x+1);
}
return EXIT_SUCCESS;
}
El problema es que al introducir por ejemplo hhola y después hola me da error porque de las h los punteros ptrX y ptrY saltan a la h y la o respectivamente.
No sé como arreglarlo. (SEGURAMENTE HAYA MÁS FALLOS)
Gracias