diff --git a/Startcode/input.c b/Startcode/input.c index ed77805..1c539d4 100644 --- a/Startcode/input.c +++ b/Startcode/input.c @@ -2,11 +2,57 @@ #include #include -// TODO: -// eine Funktion implementieren, die ein einzelnes Wort aus einer Textdatei (words.txt) einliest und als C-String zurückgibt. +// Trennzeichen zwischen Woertern (inkl. \r fuer Windows-Zeilenenden) +#define DELIMITERS " ,;\t\r\n" + +// Kopiert ein Wort sicher nach 'dest' (max. destSize - 1 Zeichen) und wandelt es in Grossbuchstaben um. +// Gibt die Laenge des gespeicherten Wortes zurueck. +static size_t copyWordUpper(char *dest, const char *src, size_t destSize) +{ + size_t len = 0; + + if(destSize == 0) + { + return 0; + } + + strncpy(dest, src, destSize - 1); + dest[destSize - 1] = '\0'; + + for(len = 0; dest[len] != '\0'; len++) + { + dest[len] = (char)toupper((unsigned char)dest[len]); + } + + return len; +} // Read words from file and store in 'words' array int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount) { + char line[MAX_LINE_LEN]; + unsigned int wordCount = 0; -} \ No newline at end of file + if(file == NULL || words == NULL) + { + return 0; + } + + // Datei zeilenweise lesen, bis sie zu Ende ist oder das Array voll ist + while(wordCount < maxWordCount && fgets(line, sizeof(line), file) != NULL) + { + // Zeile an den Trennzeichen zerlegen + char *token = strtok(line, DELIMITERS); + + while(token != NULL && wordCount < maxWordCount) + { + if(copyWordUpper(words[wordCount], token, MAX_WORD_LEN) > 0) + { + wordCount++; + } + token = strtok(NULL, DELIMITERS); + } + } + + return (int)wordCount; +}