From 3ab40ce245c17a6d251fa0a9294f18eeea3568d2 Mon Sep 17 00:00:00 2001 From: paulusja Date: Thu, 13 Nov 2025 13:00:12 +0100 Subject: [PATCH] Add solution for stringaddierer. --- 06_erweiterte_zeiger/stringaddierer.c | 61 +++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/06_erweiterte_zeiger/stringaddierer.c b/06_erweiterte_zeiger/stringaddierer.c index da1ea6b..fa1e186 100644 --- a/06_erweiterte_zeiger/stringaddierer.c +++ b/06_erweiterte_zeiger/stringaddierer.c @@ -18,6 +18,7 @@ #include #include "../02_strings/eingabe.h" +#define UNBEKANNTES_ZAHLEN_WORT -1 #define MAX_EINGABE_LEN 100 char *wandleKlein(char *text); @@ -40,3 +41,63 @@ int main() 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; +}