?
Nicht perfekt - aber fast:
std::string zahlAlsText(unsigned int zahl) {
static std::vector<std::string> einer = {"null", "ein", "zwei", "drei", "vier",
"fünf", "sechs", "sieben", "acht", "neun"};
static std::vector<std::string> elfBis19 = {"elf", "zwölf", "dreizehn",
"vierzehn", "fünfzehn", "sechzehn",
"siebzehn", "achtzehn", "neunzehn"};
static std::vector<std::string>dieZehner = {"zehn", "zwanzig", "dreißig", "vierzig",
"fünfzig", "sechzig", "siebzig",
"achtzig", "neunzig"};
if (zahl == 0) {
return "null";
}
if (zahl > 999999) {
return "Zahl ist zu groß für dieses Programm";
}
std::string alles;
int nr = 0;
while (zahl > 0) {
std::string erg;
int tausendergruppe = zahl % 1000;
int hunderter = tausendergruppe / 100;
if (hunderter > 0) {
erg += einer[hunderter] + "hundert";
}
int x = tausendergruppe % 100; // die letzten 2 Stellen
if (x > 0 && x < 10) {
erg += einer[x];
} else if (x > 10 && x < 20) {
erg += elfBis19[x - 11];
} else if (x > 0 && x % 10 == 0) { // glatter Zehner
erg += dieZehner[x / 10 - 1];
} else if (x > 20 && x < 100) {
erg += einer[x % 10] + "und" + dieZehner[x / 10 - 1];
}
// else (kann nur 0 sein, nichts tun)
zahl /= 1000;
if (x == 1 && !(hunderter == 0 && nr == 1)) // Ausnahme eintausend
erg += "s";
if (nr++ == 1)
erg += "tausend";
alles.insert(0, erg);
}
return alles;
}