diff --git a/Startcode/input.c b/Startcode/input.c index 1c539d4..98931c1 100644 --- a/Startcode/input.c +++ b/Startcode/input.c @@ -2,6 +2,51 @@ #include #include +#define SPLIT " ,;\t\n\r" // \r ist Windows Zeilenende + +int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount) +{ + char line[MAX_LINE_LEN]; + int wordCount = 0; // als unsigned ausfuehren wegen maxWordCount vergleich?? + + if(file == NULL || words == NULL) + { + return 0; + } + + // zeilenweise lesen bis ende oder array voll + while(wordCount < maxWordCount && fgets(line, sizeof(line), file) != NULL) + { + // an trennzeichen zerlegen + char *token = strtok(line, SPLIT); // strtok: zerlegt string in tokens; *token zeigt auf anfangsadresse von einem wort + + while(token != NULL && wordCount < maxWordCount) + { + // wort kopieren (max. MAX_WORD_LEN - 1 zeichen) + strncpy(words[wordCount], token, MAX_WORD_LEN - 1); // strncpy: kopiert alles wenn quelle kuerzer als MAX-WORD_LEN - 1 und haengt \0 an + + // aller letztes Zeichen auf \0 setzen, falls dieses durch buchstaben belegt + words[wordCount][MAX_WORD_LEN - 1] = '\0'; + + // wort in grossbuchstaben umwandeln + for(int i = 0; words[wordCount][i] != '\0'; i++) + { + words[wordCount][i] = (char)toupper((unsigned char)words[wordCount][i]); // unsigned char, weil umlaute über 127 gehen können und dann negativ werden wuerden + } + + wordCount++; + + // naechstes wort derselben zeile + token = strtok(NULL, SPLIT); + } + } + + return wordCount; +} + +/* + + // Trennzeichen zwischen Woertern (inkl. \r fuer Windows-Zeilenenden) #define DELIMITERS " ,;\t\r\n"