Zahl in Wort umwandeln



  • Keiner wird die deine Hausaufgaben einfach vor die Füße schmeißen. Punkt. Lies die mit wichtig gekennzeichneten Threads, nimm dir zu Herzen, was dort steht, und frag dann nochmal. Ordentlich.



  • Naja man könnte natürlich einfach 99 if anweisungen machen(kann man switch nehmen?Geht das mit string?) aber das würde wahrscheinlich dauern... 😛 Aber bis Montag schaffst du das schon^^



  • Finn schrieb:

    (kann man switch nehmen?Geht das mit string?)

    Ja / Nein

    Tipp: std::map .



  • Nein man kann mit switch keine Strings bearbeiten. 100 if's kämen ein bisschen hässlig. Ich würde es in eine Datei schreiben:

    0 null
    1 eins
    2 zwei

    Damit machst du weiter und kannst über ein Programm jede Zeile auslesen. Wenn die Zahl 45 ist, suchst du jede Zeile ab nach 45(es sei denn du machst es sotiert und von 0 bis 99) und nimmst den String der danach kommt und liest ihn aus.



  • FreakY<3Cpp schrieb:

    Damit machst du weiter und kannst über ein Programm jede Zeile auslesen. Wenn die Zahl 45 ist, suchst du jede Zeile ab nach 45(es sei denn du machst es sotiert und von 0 bis 99) und nimmst den String der danach kommt und liest ihn aus.

    Hmmm... fände ich ziemlich umständlich. Ich meine, wenn man sich mal z. B. die folgenden Zahlenwörter anschaut, dann fällt einem doch etwas auf:
    vierundzwanzig
    vierunddreißig
    vierundvierzig
    ...
    In diese Richtung würde zumindest mein Lösungsansatz gehen. So, mehr wird aber von mir nicht verraten 🙂



  • ICh weiss nicht wie ich das ganze aufbaun soll. Keinerlei struktur.
    Ich bräuchte nur einpaar anhaltspunkte. Eine klare struktur halt.
    ICh weiss einfach nicht wie ich es lösen soll. Wär echt nett wen jemand ein kleines beispiel machen würde. nur 1 zahl ( wenn möglich)

    MFG nami



  • int zahl;
    cin>>zahl;
    int einer=zahl%10;
    int zehner=zahl/10;
    if(zehner<2){
      ififififififif oder switch (zahl oder cout<<name[zahl]
    }
    else{
      cout<<einername[einer]<<"und"<<einername[zehner];
    }
    


  • nami22 schrieb:

    MFG
    nami :p

    Mein Vorschlag:

    #include <iostream>
    #include <sstream>
    #include <string>
    using namespace std;
    int main()
    {
    	const string zahlen("null eins zwei drei vier fünf "
    		"sechs sieben acht neun zehn elf zwölf");
    	istringstream is(zahlen);
    	int zahl  = 13;
    	cout << "Bitte eine Zahl eingeben (0 - 12)" << endl;
    	cin >> zahl;
    	string ausgabe;
    	if (zahl > -1 && zahl < 13)
    		do
    	    {
    			is >> ausgabe;
    		}while(zahl--);
    	else
    		ausgabe = "ungueltig!";
    	cout << "Eingabe war " << ausgabe << "." << endl;
    	return 0;
    }
    

    😉
    mfg





  • ehm danke viel mal aber wäre es auch möglich das ganze mit arrays zu lösen. Dies sind die Anforderungen.

    Falls ja ? Wie gena 🙂

    MFG nami



  • egon2 schrieb:

    ehmgeht das auch mit arrys? Falls ja wie muss ich das angehen ?

    MF¨G
    nami ( sry falls ich zu viel verlange, habe aber keine andere wahl mehr)

    nami22 schrieb:

    MFG
    nami :p

    Mein Vorschlag:

    #include <iostream>
    #include <sstream>
    #include <string>
    using namespace std;
    int main()
    {
    	const string zahlen("null eins zwei drei vier fünf "
    		"sechs sieben acht neun zehn elf zwölf");
    	istringstream is(zahlen);
    	int zahl  = 13;
    	cout << "Bitte eine Zahl eingeben (0 - 12)" << endl;
    	cin >> zahl;
    	string ausgabe;
    	if (zahl > -1 && zahl < 13)
    		do
    	    {
    			is >> ausgabe;
    		}while(zahl--);
    	else
    		ausgabe = "ungueltig!";
    	cout << "Eingabe war " << ausgabe << "." << endl;
    	return 0;
    }
    

    😉
    mfg



  • nami22 schrieb:

    ehm danke viel mal aber wäre es auch möglich das ganze mit arrays zu lösen. Dies sind die Anforderungen.
    Falls ja ? Wie gena 🙂
    MFG nami

    Jetzt bist Du gefordert, die Lektionen zu Arrays und zu if nochmal zu lesen und die kleinen Übungsaufgaben zu machen. Dann sollte es Dir kein Problem sein, meinen Entwurf zu vervollständigen.



  • Kööntest du mir wenigstens den Code den du geschrieben hast kommentieren.
    Würde mir echt weiterhelfen.

    MFG
    nami



  • was ich mit jetzt frage ist, wie lässt er die ganzen namen der zahlen ins prog fließen ?
    Mir fiele nur folgende Möglichkeiten ein:
    1. alle vorher definieren ungefähr so:

    std::string Zahlname[100];
    Zahlname[1] = "eins";
    //...
    

    das wäre sehr unschick und unschön.
    2. das mit der textdatei find ich besonders schön und ist erweiterbar.

    ifstream datei;
    std::string line;
    int i;
    int zahl;
    datei.open("list.txt");
    while (std::getline(datei,line))
    {
         i++;
         Zahlname[i] = line;
    }
    datei.close();
    cout << "Zahl: ";
    cin >> zahl;
    cout << Zahlname[zahl];
    cin.get;
    

    oder so ähnlich.



  • Quick and dirty:

    #include <iostream>
    #include <sstream>
    #include <string>
    
    std::string numToStr(const std::string& zahl);
    
    int main()
    {
    	for (unsigned int i = 1; i <= 100; ++i)
    	{
    		std::stringstream strm;
    		strm << i;
    		std::cout << i << " = " << numToStr(strm.str()) << std::endl;
    	}
    
     return 0;
    }
    
    std::string numToStr(const std::string& zahl)
    {
    	std::string spezial[19];
    	std::string hunderter[9];
    
    	spezial[0] = "ein";
    	spezial[1] = "zwei";
    	spezial[2] = "drei";
    	spezial[3] = "vier";
    	spezial[4] = "fuenf";
    	spezial[5] = "sechs";
    	spezial[6] = "sieben";
    	spezial[7] = "acht";
    	spezial[8] = "neun";
    	spezial[9] = "zehn";
    	spezial[10] = "elf";
    	spezial[11] = "zwoelf";
    	spezial[12] = "dreizehn";
    	spezial[13] = "vierzehn";
    	spezial[14] = "fuenfzehn";
    	spezial[15] = "sechszehn";
    	spezial[16] = "siebzehn";
    	spezial[17] = "achtzehn";
    	spezial[18] = "neunzehn";
    
    	hunderter[0] = "zwanzig";
    	hunderter[1] = "dreisssig";
    	hunderter[2] = "vierzig";
    	hunderter[3] = "fuenfzig";
    	hunderter[4] = "sechszig";
    	hunderter[5] = "siebzig";
    	hunderter[6] = "achtzig";
    	hunderter[7] = "neunzig";
    	hunderter[8] = "hundert";
    
    	std::string zahlwort;
    
    	if (zahl.length() == 1)
    	{
    		zahlwort = spezial[zahl[0] - '0' - 1];
    
    		if (zahl[0] == '1')
    		{
    			zahlwort += "s";
    		}
    	}
    	else if (zahl.length() == 2)
    	{
    		if (atoi(zahl.c_str()) <= 19)
    		{
    			zahlwort = spezial[atoi(zahl.c_str()) - 1];
    		}
    		else if (atoi(zahl.c_str()) > 19)
    		{
    			if (zahl[1] != '0')
    			{
    				zahlwort = spezial[zahl[1] - '0' - 1] + "und" + hunderter[zahl[0] - '0' - 2];
    			}
    			else
    			{
    				zahlwort = hunderter[zahl[0] - '0' - 2];
    			}
    		}
    	}
    	else if (zahl.length() == 3)
    	{
    		if (zahl == "100")
    		{
    			zahlwort = hunderter[8];
    		}
    	}
    
    	return zahlwort;
    }
    


  • danke das funktioniert echt toll. Aber ich verstehe den code nicht wirklich.
    Vorallem bei den if anweisungen, wass du dort gemacht hast.
    Falls du zeiot hättest köntest du den code kommentieren (//......)??

    MFG und vielen Dank
    nami 😉



  • nami22 schrieb:

    danke das funktioniert echt toll. Aber ich verstehe den code nicht wirklich.
    Vorallem bei den if anweisungen, wass du dort gemacht hast.
    Falls du zeiot hättest köntest du den code kommentieren (//......)??

    Eigentlich sollte es eine Forenregel geben, dass jemand einen Mindesteinsatz zeigen MUSS, bevor ihm die Hausaufgaben gemacht werden. Das wird ja langsam peinlich hier.

    Bis Montag könntest du dir ein Buch schnappen, das nötige C++ lernen und diese 0815-Aufgabe locker selbst erledigen, wenn du nur ein Funken Interesse daran hättest. 😉



  • Ich habe interesse daran lese bücher übe mit video2brain habe scho die strings ertellt und deklariert aber wie die ausgabe stttfinden soll da komm ich nicht draus.

    MFG
    nami 🙂



  • Kann mir echt niemand helfen. Denkt nicht das ich nichts tue. Aber ich bin kein Profi und hier ist einfach zu viel für mich.

    Kann man einem array einen wert geben der mehr als ein zechen hat.

    zb zehn oder elf oder zwölf irgendeinem arry diesen wer zuweisen oder muss ich das anze mit strings lösen ??? bitte hilf mir kp wie und das programm sollte nicht kompliziert werden

    MFH nami ⚠ 😕



  • nami22 schrieb:

    Denkt nicht das ich nichts tue.

    Dann zeig doch mal, was du bisher hast. Darauf aufbauend kann dir geholfen werden. Abgesehen davon, dass Ansätze und eine vollständige Lösung bereits gepostet wurden ... Also, bitte nicht weinen ... 😉


Anmelden zum Antworten