104 lines
2.3 KiB
C
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;
|
|
}
|