Pido Ayuda desde Costa Rica

Rickjard
15 de Septiembre del 2005
Saludos Amigos: Tengo la peor profesora del mundo nos pide cosas que no nos enseña a hacer si pueden me ayuda con este no quiero perder el curso pero la profesora asi lo quieres:

Encabezado del problema:

• Escriba un programa que lea una línea de texto.

• Produzca una línea de todas las letras que aparecen en el texto, junto con el número de veces que cada letra ocurre en la línea.

• Las letras deberán aparecer en orden, desde la más frecuente hasta la menos frecuente.

• Puede suponer que la entrada consiste únicamente en letras minúsculas.

• Ejemplo:
– Do be do bo.

Letra # ocurrencias
o 3
d 2
b 2
e 1
• El programa tendrá que ordenar el arreglo según los miembros enteros de la estructura del arreglo.


Gracias

Caiman
15 de Septiembre del 2005
El problema que pides no es del otro mundo aquí te dejo uno que tenía hace tiempo:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
void ImprimeOrdenados(char letras[],unsigned short int cont[]);

#define Limite 26
#define Fin ''

void main(void)
{
register basura;
FILE *arch;

arch=fopen("ARCHIVO","rb+");
if(arch!=NULL)
{
char letras[Limite],aux;
unsigned short int cont[Limite],auxcont=0;

letras[0]=Fin;
cont[0]=0;
while(!feof(arch))
{
aux=fgetc(arch);
if(isalpha(aux))
{
aux=toupper(aux);
for(register a=0;a<strlen(letras);a++)
{
if(aux==letras[a])
break;
}//busca letra

if(a==strlen(letras))
{
letras[auxcont]=aux;
cont[auxcont]+=1;
auxcont++;
letras[auxcont]=Fin;
cont[auxcont]=0;
}//no esta esta letra
else
cont[a]+=1;
}//si es letra
}//lee el archivo

ImprimeOrdenados(letras,cont);
}
else
printf("n Error al abrir el archivo prog2.in!!");

printf("nn Enter Any Key For Exit!! ");
scanf("%d",&basura);
}

void ImprimeOrdenados(char letras[],unsigned short int cont[])
{
char auxLetras;
register auxCont;

for(register a=0;a<strlen(letras);a++) //ordena por numero
{
for(register b=0;b<strlen(letras);b++)
{
if(cont[a]>cont[b])
{
auxCont=cont[a];
cont[a]=cont[b];
cont[b]=auxCont;
auxLetras=letras[a];
letras[a]=letras[b];
letras[b]=auxLetras;
}
}
}//por numero

for(a=0;a<strlen(letras)-1;a++) //ordena por letra
{
if(cont[a]==cont[a+1])//si son iguales
{
if(letras[a]>letras[a+1])
{
auxLetras=letras[a+1];
letras[a+1]=letras[a];
letras[a]=auxLetras;
}
}
}//por letra

for(a=0;a<strlen(letras);a++)
printf("n %c t %d",letras[a],cont[a]);
}