Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: _*p en 18 Febrero 2011, 19:18 pm



Título: [C] Contar subcadena en una cadena
Publicado por: _*p en 18 Febrero 2011, 19:18 pm
Qué les parece este ejercicio que me tocó hacer? Tienen alguna mejora?


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. /** Algoritmo que cuenta la cantidad de cadenas
  6. dentro de otra cadena **/
  7.  
  8. typedef unsigned int ui;
  9. ui cuenta_str(const char *, const char *);
  10.  
  11. int main()
  12. {
  13.    char *cadena = "¿MUNDO? MUNDO, SOY EL DIOS DEL MUNDO, MUNDO DOMINARE";
  14.    char *subcad = "MUNDO";
  15.    ui cuenta = cuenta_str(cadena, subcad);
  16.    printf("La cantidad de veces que %s se repite en %s es: %d", subcad, cadena, cuenta);
  17.    return 0;
  18. }
  19.  
  20. ui cuenta_str(const char *s1, const char *s2)
  21. {
  22.    const char *delim = " ,.!¡¿?/-";
  23.    char *aux = malloc(sizeof(char) * strlen(s1) + 1);
  24.    char *token_Ptr;
  25.    ui cnt = 0;
  26.    if(s1 == NULL)
  27.        return 0;
  28.    strcpy(aux, s1);
  29.    token_Ptr = strtok(aux, delim);
  30.    while(token_Ptr != NULL)
  31.    {
  32.        if(strcmp(token_Ptr, s2) == 0)
  33.            cnt++;
  34.        token_Ptr = strtok(NULL, delim);
  35.    }
  36.    return cnt;
  37. }

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