Files
Info2_Wortsalat/Startcode/input.c
T

87 lines
2.5 KiB
C

#include "input.h"
#include <string.h>
#include <ctype.h>
// TODO:
// eine Funktion implementieren, die ein einzelnes Wort aus einer Textdatei (words.txt) einliest und als C-String zurückgibt.
static char *liesWort(FILE *file, char *puffer, unsigned int pufferGroesse) {
int laenge = 0;
// Ungültige Zeiger oder Puffergrößen abfangen
if (file == NULL || puffer == NULL || pufferGroesse == 0) {
return NULL;
}
// Schutz vor Pufferüberlauf
if (fgets(puffer, (int)pufferGroesse, file) == NULL) {
return NULL;
}
// \n oder \r am Ende abschneiden und durch \0 ersetzen
laenge = (int)strlen(puffer);
if (laenge > 0 && puffer[laenge - 1] == '\n') {
puffer[laenge - 1] = '\0';
laenge--;
}
if (laenge > 0 && puffer[laenge - 1] == '\r') {
puffer[laenge - 1] = '\0';
laenge--;
}
return puffer;
}
// Read words from file and store in 'words' array
int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount){
int anzahlWoerter = 0;
int i = 0;
char zeilenPuffer[MAX_LINE_LEN];
char *wort = NULL;
const char *trennzeichen = " ,;\t\r\n";
// Wenn Zeiger ungültig oder kein Platz im Array programm abbrechen
if (file == NULL || words == NULL || maxWordCount == 0) {
return 0;
}
// Zeile für Zeile aus der Datei einlesen
while (anzahlWoerter < (int)maxWordCount && liesWort(file, zeilenPuffer, sizeof(zeilenPuffer)) != NULL) {
// Wort aus der Zeile herausziehen
wort = strtok(zeilenPuffer, trennzeichen);
// Wörter nacheinander verarbeiten
while (wort != NULL && anzahlWoerter < (int)maxWordCount) {
// Leerzeichen am Wortanfang überspringen
while (*wort == ' ' || *wort == '\t') {
wort++;
}
// Falls kein leerzeichem mehr kommt, Wort überspringen
if (*wort == '\0') {
wort = strtok(NULL, trennzeichen);
continue;
}
// Kleinbuchstaben in Großbuchstaben umwandeln
for (i = 0; wort[i] != '\0'; i++) {
wort[i] = (char)toupper((unsigned char)wort[i]);
}
// Wort ins Zielarray kopieren und \0 setzen
strncpy(words[anzahlWoerter], wort, MAX_WORD_LEN - 1);
words[anzahlWoerter][MAX_WORD_LEN - 1] = '\0';
anzahlWoerter++;
// Nächstes Wort aus der Zeile holen
wort = strtok(NULL, trennzeichen);
}
}
// Anzahl der Wörter zurückgeben
return anzahlWoerter;
}