2025-11-13 13:00:12 +01:00

104 lines
2.3 KiB
C

/*
* 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 <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#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;
}