<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>