55 lines
2.0 KiB
C
55 lines
2.0 KiB
C
#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;
|
|
}
|