Ich bin in C schon etwas eingerostet, aber ich würde das so machen:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// Maximale Wortlänge
#define MAX_WORD_LENGTH 100
// Maximale Balkenlänge
#define MAX_BAR_LENGTH 70
int main()
{
int counter[MAX_WORD_LENGTH + 1];
int max_count = 1;
int longest = 1;
int i, j;
int len = 0;
memset( counter, 0, sizeof( counter ) );
for( ; ; )
{
int c = getchar();
if( c == EOF || c == 'A' || len > MAX_WORD_LENGTH )
{
break;
}
// Auf Whitespace (Leerzeichen, Tab, Zeilenumbruch) prüfen
if( isspace( c ) )
{
// Zähler für die aktuelle Wortlänge hochzählen
++counter[len];
// Länge zurücksetzen
len = 0;
}
else
{
++len;
}
}
// Länge des längsten Wortes und größte Anzahl ermitteln
for( i=1; i <= MAX_WORD_LENGTH; ++i )
{
if( counter[i] > max_count ) max_count = counter[i];
if( counter[i] > 0 ) longest = i;
}
// Histogramm ausgeben
for( i=1; i<=longest; ++i )
{
// Balkenlänge berechnen
int bar_length = counter[i] * MAX_BAR_LENGTH / max_count;
printf( "\n%3d (%3d) ", i, counter[i] );
for( j=0; j<bar_length; ++j )
{
putchar( '*' );
}
}
}[/code]
Fragen oder Verbesserungsvorschläge sind willkommen