#include "input.h" #include #include // 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; 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; }