[C] Contar subcadena en una cadena

Iniciado por _*p, 18 Febrero 2011, 19:18 PM

0 Miembros y 1 Visitante están viendo este tema.

_*p

Qué les parece este ejercicio que me tocó hacer? Tienen alguna mejora?


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/** Algoritmo que cuenta la cantidad de cadenas
dentro de otra cadena **/

typedef unsigned int ui;
ui cuenta_str(const char *, const char *);

int main()
{
   char *cadena = "¿MUNDO? MUNDO, SOY EL DIOS DEL MUNDO, MUNDO DOMINARE";
   char *subcad = "MUNDO";
   ui cuenta = cuenta_str(cadena, subcad);
   printf("La cantidad de veces que %s se repite en %s es: %d", subcad, cadena, cuenta);
   return 0;
}

ui cuenta_str(const char *s1, const char *s2)
{
   const char *delim = " ,.!¡¿?/-";
   char *aux = malloc(sizeof(char) * strlen(s1) + 1);
   char *token_Ptr;
   ui cnt = 0;
   if(s1 == NULL)
       return 0;
   strcpy(aux, s1);
   token_Ptr = strtok(aux, delim);
   while(token_Ptr != NULL)
   {
       if(strcmp(token_Ptr, s2) == 0)
           cnt++;
       token_Ptr = strtok(NULL, delim);
   }
   return cnt;
}


Debería liberar la memoria de aux cierto?

EDITADO: Debería también contar MUNDO en la cadena "MUNDOROLA"? creen que sea necesario? Digamos que asumí que cadena = palabra :P