buenas gente, estoy tratando de hacer un programa que le pases una palabra y una frase, y te diga cuantas veces esta la palabra en la frase. estoy tratando de hacerlo con punteros y funciones para ir practicando, asi que seguro que no es la manera mas eficiente de hacerlo. pero bueno, el codigo es el siguiente:
#include <stdio.h>
#include <stdlib.h>
#define WORD 10
#define SENTENCE 50
int longitud_cadena (char* a);
void comparar_cadenas (char* s, int i, char* w, int lw, int* words);
int main() {
char *w,*s;
int i,long_w,long_s,words;
w
=(char*) calloc(WORD
,sizeof(char)); s
=(char*) calloc(SENTENCE
,sizeof(char));
words=0;
printf("Introduce una palabra de maximo %d caracteres:\n",WORD
-2); long_w=longitud_cadena(w);
printf("Introduce una frase de maximo %d caracteres:\n",SENTENCE
-2); long_s=longitud_cadena(s);
for(i=0;i<long_s;i++) {
if(*(s+i)==*w) { comparar_cadenas(s,i,w,long_w,&words); }
}
printf("La palabra ocurrio %d veces.\n",words
); return 0;
}
int longitud_cadena (char* a) {
int num_ch,i;
num_ch=0;
for(i=0;(int)*(a+i)!=10;i++) { num_ch++; }
return(num_ch);
}
void comparar_cadenas (char* s, int i, char* w, int lw, int* words) {
int n;
for(n=0;n<lw;n++) {
if(*(s+i+n)!=*(w+n)) { break; }
}
if(n==lw) { (*words)++; }
}
el tema es que compila bien, pero siempre me dice que la palabra ocurrio 0 veces en la oracion. llevo 2 horas repasandolo y siguiendo el flujo del programa con papel y boli y es que no doy con el fallo.
alguien me echa un cable? la verdad se agradeceria... no quiero irme a dormir sin verlo funcionando xD
gracias!
EDITADO: añadido algunas correcciones y ahora casi funciona, la salida marca 1 si la palabra aparece una o mas veces, y marca 0 si la palabra no se encuentra en la frase.
EDITADO2: ya funciona correctamente. por si a alguien le interesa, el error estaba en la funcion longitud_cadena que devolvia 1 caracter mas de la cuenta.
gracias por la ayuda!