/* * Ergänzen Sie im untenstehenden Programm die fehlenden Funktionen. addiereText bekommt dabei eine Folge von * Zahlenwörtern kleiner zehn übergeben und ermittelt daraus die Summe. Groß- und Kleinschreibung soll keine Rolle spielen. * Zudem liefert die Funktion 0, wenn ein Zahlenwort nicht aufgelöst werden konnte, ansonsten 1. * * 1. Beispielhafter Programmablauf: * >> Addiere: Fuenf achT SIEBEN * Das Ergebnis lautet 20. * * 2. Beispielhafter Programmablauf: * >> Addiere: fuenf achtzehn sieben * Falsche Eingabe. */ #include #include #include #include #include "../02_strings/eingabe.h" #define UNBEKANNTES_ZAHLEN_WORT -1 #define MAX_EINGABE_LEN 100 char *wandleKlein(char *text); int wandleZahl(const char *wort); int addiereText(const char *text, int *erg); int main() { char eingabeText[MAX_EINGABE_LEN]; int erg; gibTextEin("Addiere: ", eingabeText, MAX_EINGABE_LEN); if(addiereText(eingabeText, &erg)) printf("Das Ergebnis lautet %d.\n", erg); else printf("Falsche Eingabe.\n"); return EXIT_SUCCESS; } char *wandleKlein(char *text) { char *anfang = text; while(*text != '\0') { *text = tolower(*text); text++; } return anfang; } int wandleZahl(const char *wort) { const char *zahlenWoerter[] = {"null", "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "zehn"}; unsigned int anzahl = sizeof(zahlenWoerter)/sizeof(zahlenWoerter[0]); for(int i = 0; i < anzahl; i++) { if(strcmp(wort, zahlenWoerter[i]) == 0) return i; } return UNBEKANNTES_ZAHLEN_WORT; } int addiereText(const char *text, int *erg) { int istErfolgreich = 1; const char *trenner = " \t"; char *wort; char *kopie = malloc(sizeof(char)*(strlen(text)+1)); strcpy(kopie, text); *erg = 0; //wandleKlein(kopie); wort = strtok(kopie, trenner); while(wort != NULL) { int zahl = wandleZahl(wandleKlein(wort)); if(zahl == UNBEKANNTES_ZAHLEN_WORT) { istErfolgreich = 0; break; } else *erg += zahl; wort = strtok(NULL, trenner); } free(kopie); return istErfolgreich; }