#include <stdio.h>
#include <ctype.h>

#define MAX_WORDLENGTH 100  // für die maximale Wortlänge
#define MAX_TEXT_LENGTH 1000  // für die maximale Textlänge

int main() {
    char dateiname[256];  // Puffer für den Dateinamen, damit es nicht zu Pufferüberläufen kommt

    printf("Bitte gib den Dateinamen ein (z.B. text.txt oder Pfad): ");
    scanf("%255s", dateiname);  // Dateinamen von Tastatur einlesen und Begrenzung auf 255 Zeichen schützt vor Pufferüberläufen

    FILE *file = fopen(dateiname, "r");  // Datei öffnen
    if (file == NULL) {
        perror("Fehler beim oeffnen der Datei"); // Überprüfen ob die Eingabe stimmt
        return 1;
    }

    int frequency[MAX_WORDLENGTH] = {0};
    char text[MAX_TEXT_LENGTH];
    int wordlength = 0;


    while (fgets(text, sizeof(text), file) != NULL) { // Datei zeilenweis lesen
        for (int i = 0; text[i] != '\0'; i++) {
            if (isalnum(text[i])) { //isalnum ueberprüft ob das es ein wort oder zahl ist also kein leerzeichen, satzzeichen
                wordlength++; // zaehlt die buchstaben in dem wort
            } else {
                if (wordlength > 0 && wordlength < MAX_WORDLENGTH) { //überprüft ob ein wort gezählt werden kann (überschreitet micht max Wortlänge)
                    frequency[wordlength]++; //Erhöht die Häufigkeit für die aktuelle Wortlänge
                    wordlength = 0; //Setzt den Zähler für die Wortlänge zurück für das nächste Wort
                }
            }
        }

        // Letztes Wort in der Zeile nicht vergessen
        if (wordlength > 0 && wordlength < MAX_WORDLENGTH) {
            frequency[wordlength]++;
            wordlength = 0;
        }
    }

    fclose(file);  // Datei schließen

    // Ergebnis ausgeben
    printf("\nHaeufigkeitsverteilung der Wortlaengen:\n");
    for (int i = 1; i < MAX_WORDLENGTH; i++) { //geht alle wortlängen durch
        if (frequency[i] > 0) {
            printf("Wortlaenge %d: %d\n", i, frequency[i]); // überprüft die häufigkeit
        }
    }

    return 0;
}
