Zahl als Wort ausgeben?
-
halloei schrieb:
kpeter schrieb:
wenn er z.B. 53 ausgeben will?
50 = fünfzig
3 = dreifünfzigdrei .. ?
Analyse der Zehnerstellen;
53 = drei und fünfzig
Ausnahmen: elf, zwölf, siebzehn...
-
Hallo
Letzendlich gibt es keine konkrete Funktion in C++ oder der VCL die dir da weiter hilft. Du must das schon selber implementieren. Das Vorgehen wurde ja schon genannt : Zahl in einen String verwandeln und alle Stellen per Schleife ablaufen, und zu der Ziffer einer Stelle das richtige Wort zuordnen. Sonderfälle wie das gezeigte "und" must du entsprechend mit passenden if-Bedingungen abhandeln.
Da sowas gerne als Hausaufgabe vergeben wird, solltest du im hier im Forum oder im Netz genug Algos und Codes finden.
bis bald
akari
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Das Kernstück einer solchen Funktion ist es, die Zahlen bis 999 rauszubekommen.
Alles was darüber ist, ist nur zusammengesetzt aus 0-999 + "trennwort". Wobei die Trennwörter die "10er Potenzen" sind (also Million, Milliarde, Billion, Billiarde.Weil ich grad gut drauf bin:
Ich habe soetwas für ein FH Projekt gebastelt. Ist allerdings PHP und ich habe mich keine mühe gegeben, das es wirklich toll ist. Es funktioniert und ich find für 2 Stunden arbeit ganz ok.<?php // Million - Milliarde - Billion – Billiarde – Trillion – Trilliarde – Quadrillion // Quadrilliarde – Qintillion (Qinquillion) – Quintilliarde – Sextillion // Sextilliarde – Septillion – Septilliarde – Oktollion – Oktilliarde – Nonilion // Nonilliarde – Dezillion – Dezilliarde. function text2zahl($text12) { $text = strtolower($text12); $tausender[3] = "tausend"; $tausender[6] = "million"; $tausender[9] = "milliarde"; $tausender[12] = "billion"; $tausender[15] = "billiarde"; $tausender[18] = "trillion"; $tausender[21] = "trilliarde"; $tausender[24] = "quadrillion"; $tausender[27] = "quadrilliard"; $tausender[30] = "qintillion"; $tausender[33] = "qintilliarde"; $delimiter = array(); $length; // find all tausender in $text and store in $delimiter foreach( $tausender as $key => $value) { if ( strpos( $text, $value)) { $delimiter[$key]= $value; $length = $key; } } $erg = ""; if( count($delimiter) == 0) { return translate100($text); } foreach ( $delimiter as $key => $value) { $args = explode( $value, $text); if ( count( $args) > 1) { $n = substr( $args[1], 0, 1); $en = substr( $args[1], 0, 2); $neu = substr( $args[1], 0, 3); if ( $en == "en") { $args[1] = substr( $args[1], 2); } if ( $n == "n") { if ( !($neu == "neu")) { $args[1] = substr( $args[1], 1); } } $onehundred = translate100($args[1]); for ( $i = strlen($onehundred) ; $i < $key ; $i++) { $onehundred = "0".$onehundred; } $erg = $onehundred . $erg; $text = $args[0]; if ( $key == $length) { $onehundred = translate100($args[0]); for ( $i = strlen($onehundred) ; $i < 3 ; $i++) { $onehundred = "0".$onehundred; } $erg = $onehundred . $erg; } } else { $onehundred = translate100($args[0]); for ( $i = strlen($onehundred) ; $i < 3 ; $i++) { $onehundred = "0".$onehundred; } $erg = $onehundred . $erg; } if ( substr($erg,0,1) == "0") { while( "0" == substr($erg,0,1)) { $erg = substr($erg,1); } } for( $i = strlen($erg) ; $i < $key ; $i++) { echo "<br>baaaaaa"; $erg = "0" . $erg; } } return $erg; } function translate100( $text) { $text = strtolower ($text); $delimiter100 = "hundert"; $numberWord10["zehn"] = 10; $numberWord10[ "zwanzig"] = 20; $numberWord10["dreißig"] = 30; $numberWord10["vierzig"] = 40; $numberWord10[ "fünfzig"] = 50; $numberWord10["sechzig"] = 60; $numberWord10["siebzig"] = 70; $numberWord10["achtzig"] = 80; $numberWord10["neunzig"] = 90; $numberWord["ein"] = 1; $numberWord["eins"] = 1; $numberWord["eine"] = 1; $numberWord["zwei"] = 2; $numberWord["drei"] = 3; $numberWord["vier"] = 4; $numberWord["fünf"] = 5; $numberWord["sechs"] = 6; $numberWord["sieben"] = 7; $numberWord["acht"] = 8; $numberWord["neun"] = 9; $delimiterSpecial["elf"] = 11; $delimiterSpecial["zwölf"] = 12; $delimiterSpecial["sechzehn"] = 16; $delimiterSpecial["siebzehn"] = 17; $delimiterBindewort10 = "und"; $args = explode( $delimiter100, $text); if( count( $args) > 1 ) { $hunderter = $numberWord[$args[0]]* pow(10,2); $text = $args[1]; } else { $text = $args[0]; } $special= $delimiterSpecial[ $text]; if ( $special) { return $hunderter + $special; } $args = explode ( $delimiterBindewort10, $text); if( count( $args) > 1 ) { $zehner = $numberWord10[ $args[1]]; $einer = $numberWord[ $args[0]]; } else { $einer = $numberWord[ $args[0]]; if( !$einer) { $zehner = $numberWord10[ $args[0]]; } } return $hunderter + $zehner + $einer; } ?>
-
Mit ein paar mehr Leerzeilen könnte der Quelltext eventuell noch übersichtlicher werden!^^
-
Und frag mich nicht, warum da so viele leerzeilen sind. Bei mir sind es nur einzelne leerzeilen. Vielleicht ein problem mit smultron oder macos allgemein? Oo
bei mir im code editor sieht es so aus:
$a = "bier"; $b = "schinken"; $c = "wurst";
-
scheint tatsächlich ein copy/paste problem zu sein.
-
Wenn du jetzt auch noch ein lateinisches Zählsystem implementierst, dann kannst du sogar jede beliebige Zahl ausgeben, nicht bloß bis (1 Sextillion - 1).
-
In C++ bis eine Million und ohne Garantie auf Korrektheit:
std::string numberToText(int n) { static const char* firstTwenty[]={"null","eins","zwei","drei","vier","fünf","sechs","sieben","acht","neun","zehn","elf","zwölf","dreizehn","vierzehn","fünfzehn","sechzehn","siebzehn","achtzehn","neunzehn"}; static const char* zehner[]={"zwanzig","dreißig","vierzig","fünfzig","sechzig","siebzig","achtzig","neunzig"}; if (n<0)return "minus "+numberToText(std::abs(n)); if (n<20)return firstTwenty[n]; if (n<100) { if (n%10==0)return zehner[n/10-2]; if (n%10==1)return "einund"+numberToText(n/10*10); return numberToText(n%10)+"und"+numberToText(n/10*10); } if (n<1000) { if (n==100)return "hundert"; if (n%100==0)return numberToText(n/100)+"hundert"; if (n/100==1)return "einhundert"+numberToText(n%100); return numberToText(n/100)+"hundert"+numberToText(n%100); } if (n<1000000) { int t=n/1000; int r=n%1000; std::string str; if (t>1)str=numberToText(t); str+="tausend"; if (r>0)str+=numberToText(r); return str; } return "kann ich nicht"; }
-
Es gab mal einen Thread dazu mit diesem Ergebnis (für Zahlen von 0 bis 99):
#include <string> std::string foo(int i) { std::string e[]={"","ein","zwei","drei","vier","fuenf","sechs","sieben","acht","neun","zehn","elf","zwoelf","dreizehn","vierzehn","fuenfzehn","sechzehn","siebzehn","achtzehn","neunzehn","","","zwanzig","dreissig","vierzig","fuenfzig","sechzig","siebzig","achtzig","neunzig","","und",""}; return e[32]=e[i>19?i%10:i]+(i==1?"s":"")+e[i%10&&i>20?31:30]+e[i/10+20],e[32][0]-='a'-'A',i==0?"Null":e[32]; }