#include <iostream>
#include <cstring>
using namespace std;
void inWorten(char zielString[], int maxAnzZeich, int zahl, char fuellZeich);
bool hunderterWorten(char zielString[], int maxAnzZeich, int zahl, bool zugross);
bool passt_laenge (char zielString[], int maxAnzZeich, int laenge_neu);
bool passt_laenge (char zielString[], int maxAnzZeich, int laenge_neu) {
if ( strlen(zielString) + 1 + laenge_neu <= maxAnzZeich) // Plus 1, da Nullbyte nicht mitgezaehlt wird
return true;
else
return false;
} //passt_laenge
void inWorten(char zielString[], int maxAnzZeich, int zahl, char fuellZeich) {
bool zugross = false;
// Deutscher Teil ---------------- Anfang -----------
if (zahl == 0) { // Abfangen des Sonderfalles: null
if (passt_laenge(zielString, maxAnzZeich, strlen("null") ) ) {
strcat(zielString,"null");
zugross = true;
} else { // zahl > 0
if (zahl < 1000) { // Hunderter
zugross = hunderterWorten(zielString, maxAnzZeich, zahl, zugross);
// Ergebniss steht in zielString, fuer eine Zahl < 1000
} else { // zahl >= 1000
if ( zahl/1000 == 1 ) { // Test auf Sonderfall (ein)tausen
if (passt_laenge(zielString, maxAnzZeich, strlen("ein") ) ) {
strcat(zielString,"ein");
} else {
zugross = true;
}
if (passt_laenge(zielString, maxAnzZeich, strlen("tausend") ) ) {
strcat(zielString,"tausend");
} else {
zugross = true;
}
zugross = hunderterWorten(zielString, maxAnzZeich, zahl%1000, zugross);
} else {
zugross = hunderterWorten(zielString, maxAnzZeich, zahl/1000, zugross);
if (passt_laenge(zielString, maxAnzZeich, strlen("tausend") ) ) {
strcat(zielString,"tausend");
} else {
zugross = true;
}
zugross = hunderterWorten(zielString, maxAnzZeich, zahl%1000, zugross);
} //else
} //else
} //else
} else // Deutscher Teil ---------------- Ende -----------
// Englischer Teil ---------------- Anfang -----------
if(zugross) {
strcpy(zielString,""); // zielString loeschen
for (int i=0;i<=maxAnzZeich-2;i++) { // zielString mit fuellZeichen auffuellen
zielString = fuellZeich;
}
}
} //inWorten
bool hunderterWorten(char zielString[], int maxAnzZeich, int zahl, bool zugross) {
// Deutscher Teil ---------------- Anfang -----------
if (zahl > 99) {
switch (zahl/100) { // Hunderter
case 1 : if (passt_laenge(zielString, maxAnzZeich, strlen("ein") ) ) {
strcat(zielString,"ein");
} else {
zugross = true;
}
break;
case 2 : if (passt_laenge(zielString, maxAnzZeich, strlen("zwei") ) ) {
strcat(zielString,"zwei");
} else {
zugross = true;
}
break;
case 3 : if (passt_laenge(zielString, maxAnzZeich, strlen("drei") ) ) {
strcat(zielString,"drei");
} else {
zugross = true;
}
break;
case 4 : if (passt_laenge(zielString, maxAnzZeich, strlen("vier") ) ) {
strcat(zielString,"vier");
} else {
zugross = true;
}
break;
case 5 : if (passt_laenge(zielString, maxAnzZeich, strlen("fuenf") ) ) {
strcat(zielString,"fuenf");
} else {
zugross = true;
}
break;
case 6 : if (passt_laenge(zielString, maxAnzZeich, strlen("sechs") ) ) {
strcat(zielString,"sechs");
} else {
zugross = true;
}
break;
case 7 : if (passt_laenge(zielString, maxAnzZeich, strlen("sieben") ) ) {
strcat(zielString,"sieben");
} else {
zugross = true;
}
break;
case 8 : if (passt_laenge(zielString, maxAnzZeich, strlen("acht") ) ) {
strcat(zielString,"acht");
} else {
zugross = true;
}
break;
case 9 : if (passt_laenge(zielString, maxAnzZeich, strlen("neun") ) ) {
strcat(zielString,"neun");
} else {
zugross = true;
}
//switch
if (passt_laenge(zielString, maxAnzZeich, strlen("hundert") ) ) {
strcat(zielString,"hundert");
} else {
zugross = true;
}
zahl = zahl % 100; // hunderter abschneiden
}
if (zahl > 9) {
if (zahl == 10) { // Sonderfaelle abfangen
if (passt_laenge(zielString, maxAnzZeich, strlen("zehn") ) ) {
strcat(zielString,"zehn");
} else {
zugross = true;
}
} else if (zahl == 11) {
if (passt_laenge(zielString, maxAnzZeich, strlen("elf") ) ) {
strcat(zielString,"elf");
} else {
zugross = true;
}
} else if (zahl == 12) {
if (passt_laenge(zielString, maxAnzZeich, strlen("zwoelf") ) ) {
strcat(zielString,"zwoelf");
} else {
zugross = true;
}
} else if (zahl >= 13 && zahl <=19) {
switch (zahl%10) {
case 3 : if (passt_laenge(zielString, maxAnzZeich, strlen("drei") ) ) {
strcat(zielString,"drei");
} else {
zugross = true;
}
break;
case 4 : if (passt_laenge(zielString, maxAnzZeich, strlen("vier") ) ) {
strcat(zielString,"vier");
} else {
zugross = true;
}
break;
case 5 : if (passt_laenge(zielString, maxAnzZeich, strlen("fuenf") ) ) {
strcat(zielString,"fuenf");
} else {
zugross = true;
}
break;
case 6 : if (passt_laenge(zielString, maxAnzZeich, strlen("sech") ) ) {
strcat(zielString,"sech");
} else {
zugross = true;
}
break;
case 7 : if (passt_laenge(zielString, maxAnzZeich, strlen("sieb") ) ) {
strcat(zielString,"sieb");
} else {
zugross = true;
}
break;
case 8 : if (passt_laenge(zielString, maxAnzZeich, strlen("acht") ) ) {
strcat(zielString,"acht");
} else {
zugross = true;
}
break;
case 9 : if (passt_laenge(zielString, maxAnzZeich, strlen("neun") ) ) {
strcat(zielString,"neun");
} else {
zugross = true;
}
}//switch
if (passt_laenge(zielString, maxAnzZeich, strlen("zehn") ) ) {
strcat(zielString,"zehn");
} else {
zugross = true;
}
} else {
if (zahl % 10 != 0) { // Einer
switch (zahl % 10) {
case 1 : if (passt_laenge(zielString, maxAnzZeich, strlen("einund") ) ) {
strcat(zielString,"einund");
} else {
zugross = true;
}
break;
case 2 : if (passt_laenge(zielString, maxAnzZeich, strlen("zweiund") ) ) {
strcat(zielString,"zweiund");
} else {
zugross = true;
}
break;
case 3 : if (passt_laenge(zielString, maxAnzZeich, strlen("dreiund") ) ) {
strcat(zielString,"dreiund");
} else {
zugross = true;
}
break;
case 4 : if (passt_laenge(zielString, maxAnzZeich, strlen("vierund") ) ) {
strcat(zielString,"vierund");
} else {
zugross = true;
}
break;
case 5 : if (passt_laenge(zielString, maxAnzZeich, strlen("fuenfund") ) ) {
strcat(zielString,"fuenfund");
} else {
zugross = true;
}
break;
case 6 : if (passt_laenge(zielString, maxAnzZeich, strlen("sechsund") ) ) {
strcat(zielString,"sechsund");
} else {
zugross = true;
}
break;
case 7 : if (passt_laenge(zielString, maxAnzZeich, strlen("siebenund") ) ) {
strcat(zielString,"siebenund");
} else {
zugross = true;
}
break;
case 8 : if (passt_laenge(zielString, maxAnzZeich, strlen("achtund") ) ) {
strcat(zielString,"achtund");
} else {
zugross = true;
}
break;
case 9 : if (passt_laenge(zielString, maxAnzZeich, strlen("neunund") ) ) {
strcat(zielString,"neunund");
} else {
zugross = true;
}
}//switch
} // einer vorhanden - if
switch (zahl / 10) { // Zehner
case 2 : if (passt_laenge(zielString, maxAnzZeich, strlen("zwanzig") ) ) {
strcat(zielString,"zwanzig");
} else {
zugross = true;
}
break;
case 3 : if (passt_laenge(zielString, maxAnzZeich, strlen("drei�g") ) ) {
strcat(zielString,"drei�g");
} else {
zugross = true;
}
break;
case 4 : if (passt_laenge(zielString, maxAnzZeich, strlen("vierzig") ) ) {
strcat(zielString,"vierzig");
} else {
zugross = true;
}
break;
case 5 : if (passt_laenge(zielString, maxAnzZeich, strlen("fuenfzig") ) ) {
strcat(zielString,"fuenfzig");
} else {
zugross = true;
}
break;
case 6 : if (passt_laenge(zielString, maxAnzZeich, strlen("sechzig") ) ) {
strcat(zielString,"sechzig");
} else {
zugross = true;
}
break;
case 7 : if (passt_laenge(zielString, maxAnzZeich, strlen("siebzig") ) ) {
strcat(zielString,"siebzig");
} else {
zugross = true;
}
break;
case 8 : if (passt_laenge(zielString, maxAnzZeich, strlen("achtzig") ) ) {
strcat(zielString,"achtzig");
} else {
zugross = true;
}
break;
case 9 : if (passt_laenge(zielString, maxAnzZeich, strlen("neunzig") ) ) {
strcat(zielString,"neunzig");
} else {
zugross = true;
}
}//switch
} // else, zweistelligen - restlich
} else { // zahl <= 9
switch (zahl) {
case 1 : if (passt_laenge(zielString, maxAnzZeich, strlen("eins") ) ) {
strcat(zielString,"eins");
} else {
zugross = true;
}
break;
case 2 : if (passt_laenge(zielString, maxAnzZeich, strlen("zwei") ) ) {
strcat(zielString,"zwei");
} else {
zugross = true;
}
break;
case 3 : if (passt_laenge(zielString, maxAnzZeich, strlen("drei") ) ) {
strcat(zielString,"drei");
} else {
zugross = true;
}
break;
case 4 : if (passt_laenge(zielString, maxAnzZeich, strlen("vier") ) ) {
strcat(zielString,"vier");
} else {
zugross = true;
}
break;
case 5 : if (passt_laenge(zielString, maxAnzZeich, strlen("fuenf") ) ) {
strcat(zielString,"fuenf");
} else {
zugross = true;
}
break;
case 6 : if (passt_laenge(zielString, maxAnzZeich, strlen("sechs") ) ) {
strcat(zielString,"sechs");
} else {
zugross = true;
}
break;
case 7 : if (passt_laenge(zielString, maxAnzZeich, strlen("sieben") ) ) {
strcat(zielString,"sieben");
} else {
zugross = true;
}
break;
case 8 : if (passt_laenge(zielString, maxAnzZeich, strlen("acht") ) ) {
strcat(zielString,"acht");
} else {
zugross = true;
}
break;
case 9 : if (passt_laenge(zielString, maxAnzZeich, strlen("neun") ) ) {
strcat(zielString,"neun");
} else {
zugross = true;
}
}//switch
}//else
} else // Deutscher Teil ---------------- Ende -----------
return zugross;
}//hunderterWorten
int main()
{
const int maxAnzZeich = 50; // Variable wird im Programm nicht mehr veraendert
const char fuellZeich = '*';
char zielString[maxAnzZeich] = ""; // Der C-String in dem das Ergebniss
//gespeichert wird mit leerem String initialisieren
int zahl;
int wahl;
do {
cout << "Bitte geben Sie eine Wert aus dem Intervall [0,...,999999]!" << endl << endl;
}
cin >> zahl;
cout << endl;
inWorten(zielString, maxAnzZeich, zahl, fuellZeich);
cout << zielString << endl << endl;
return 0;
} //main