<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><font style="" face="Courier New">HOla, trato de tontabilizar la frecuencia de cada palabra de un texto, pero no se porque el programa se detiene...<br><br>//cadena de caracteres 29<br>#include"iostream.h"<br>#include"stdlib.h"<br>#include"string.h"<br>#include"iostream.h"<br>void frecuencia(char *cad[]);<br>void ocurrencia(char *cad[]);<br>void palabras(char *cad[]);<br><br>int main()<br>    {<br>    char *cad[30], aux[200];<br>    short nl=0;<br>    cout<<"ANALIZADOR DE TEXTO\n";<br>    cout<<"Ingrese las lineas de texto.\n";<br>    cout<<"Linea nula para terminar\n\n";<br>    do  {<br>        gets(aux);<br>        cad[nl]=(char *)malloc(sizeof(aux)+1);<br>        strcpy(cad[nl], aux);<br>        }while(*cad[nl++]);<br>    <br>    //frecuencia(cad);<br>    //ocurrencia(cad);<br>    palabras(cad);<br>    <br>    cin.get();<br>    return 0;<br>    }<br>    <br><br><br><br><br><br><br><br>void frecuencia(char *cad[])<br>    {<br>    char letra, *ptr;<br>    static short alf[26];<br>    for(short x=0; x<26; x++)<br>        {<br>        letra=(char)(x+(short)'a');<br>        for(short n=0; *cad[n]; n++)<br>            {<br>            ptr=cad[n];<br>            while(ptr=strchr(ptr,letra))<br>                {<br>                alf[x]++;<br>                ptr++;<br>                }<br>            }<br>        }<br>    <br>    //imprimimos<br>    cout<<"A)\nAlfabeto\tFrecuencia\n";<br>    for(short x=0; x<26; x++)<br>        cout<<(char)(x+(short)'a')<<"\t\t"<<alf[x]<<endl;<br>    }<br><br><br><br>void ocurrencia(char *cad[])<br>    {<br>    char aux[200], *car=" ,.;:\n\t", *ptr;<br>    static short lp[15], a;<br>    <br>    for(short x=0; *cad[x]; x++)<br>        {<br>        strcpy(aux, cad[x]);<br>        ptr=strtok(aux,car);<br>        for(a=0; ptr[a]; a++);<br>        lp[a]++;<br>        while(ptr=strtok('\0',car))<br>            {<br>            for(a=0; ptr[a]; a++);<br>            lp[a]++;<br>            }<br>        }<br>    <br>    //imprimimos<br>    cout<<"B)\nLong. de palabras\tOcurrencia\n";<br>    for(a=1; a<15;a++)<br>        cout<<"\t"<<a<<"\t\t    "<<lp[a]<<endl;<br>    }<br><br><br><br>void palabras(char *cad[])<br>    {<br>    static char aux[2];<br>    char *sr, *copia;<br>    char *ptr, *ptraux, car[]=" ,.;:\n\t";<br>    short fp;<br>    <br>    //copiamos todo el texto a *aux (un solo array)<br>    for(short x=0; *cad[x]; x++)<br>        {<br>        strcat(aux,cad[x]);<br>        strcat(aux," ");<br>        }<br>    cout<<aux;<br>    //ponemos *aux en minusculas<br>    for(short x=0; aux[x]; x++)<br>        if(isalpha(aux[x]))<br>            tolower(aux[x]);<br>    cout<<"\npuse a aux en minusculas\n";<br>    <br>    copia=(char *)malloc(sizeof(aux) + 1);<br>    strcpy(copia, aux);<br>    sr=(char *)malloc(sizeof(aux) + 1);<br>    //sr en cero<br>    *sr=0;<br>    <br>    <br>    //copiamos las palabras sin repetir a sr fragmentando copia<br>    ptr=strtok(copia,car);<br>    if(!strstr(sr,ptr));<br>        {<br>        strcat(sr, ptr);<br>        strcat(sr, " ");<br>        }<br>    while(ptr=strtok('\0', car))<br>        if(!strstr(sr,ptr))<br>            {<br>            strcat(sr, ptr);<br>            strcat(sr, " ");<br>            }<br>    <br>    cout<<"\nC)\nPalabra\t\tFrecuencia\n";<br>    <br>    //fragmentamos sr mientras contamos las ocurrencias en aux e imprimimos<br>    ptr=strtok(sr,car);<br>    ptraux=aux;<br>    fp=0;<br>    while(ptraux=strstr(ptraux, ptr))<br>        {<br>        fp++;<br>        ptraux++;<br>        }<br>    cout<<ptr<<"\t\t"<<fp<<endl;<br>    <br>    while(ptr=strtok('\0', car))<br>        {<br>        ptraux=aux;<br>        fp=0;<br>        while(ptraux=strstr(ptraux, ptr))<br>            {<br>            fp++;<br>            ptraux++;<br>            }<br>        cout<<ptr<<"\t\t"<<fp<<endl;<br>        }<br>    cout<<"FIN";                         //llega hasta en final de la funcion pero se detiene<br>    }<br><br><br><br>La ultima funcion es la que me intersa; la funcion palabras, que contabiliza la frecuencia de cada palabra. Como ven en la ultima sentencia muestra el mensaje "FIN", y asi se ejecuta. Es decir, el programa termina de ejecutarse, pero al ultimo se detiene.<br><br>Espero que puedan ayudarme. Gracias.<br id="FontBreak"></font>                                           </div></body>
</html>