#include "hash.h" /* * gcc -Wall hash.c word_count.c -o word_count * Aufruf: ./word_count < test.txt * */ #define MAX_WORD_LENGTH 1024 int main () { char ch = 0; unsigned int count = 0; char currentWord[MAX_WORD_LENGTH]; /* * Die Laenge des Vektors des Hashes sollte eine Primzahl sein. * Am besten verwendet man eine Funktion zum erzeugen einer Primzahl. */ unsigned int hash_size = 13; Hash h; int value; //Einen Hash erzeugen create_hash(&h, hash_size); //Einlesen while ( (ch = getchar()) != EOF ) { /* * Ist es a-z oder A-Z oder 0-9 oder _ * Ist das Wort noch kuerzer als MAX_WORD_LENGTH? */ if( ((ch == 45) || ((ch >= 48) && (ch <= 57)) || ((ch >= 65) && (ch <= 90)) || ((ch >= 97) && (ch <= 122))) && (count < MAX_WORD_LENGTH-1) ) { currentWord[count] = ch; count++; } //ch ist kein erlaubtes Zeichen => das Wort ist beendet else { //Ist das Wort mindestens 1 Zeichen lang => count > 0 if( count > 0 ) { //Zeichenkette abschliessen currentWord[count] = '\0'; //Ein Eintrag mit diesem Wort existiert bereits if( get( h, currentWord, &value ) ) { //Den Wert um 1 erhoehen value++; //Den geaenderten Wert im Hash speichern change_value( h, currentWord, value ); } //Es gibt dieses Wort noch nicht => einfuegen else { if( !put( h, currentWord, 1 ) ) { printf("Could not put word %s into hash!\n", currentWord); } } } count = 0; } } //Ausgabe aller Woerter und ihrer Haeufigkeit print( h ); return 0; }