Zahl in Wort umwandeln



  • 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 ... 😉



  • cin >> strm;



  • So ich habe gilfe von einem kollegen bekommen.
    Das hier hat er gemacht. Ich muss aber nur von 0 - 99 umwandeln köönen und das wandelt bis ...... milliarden um. Wenn ich den teil wenehme der nicht gbraucht wird funkt alles icht mehr. Kann mir jemand den code verkürzen.

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string unter20(unsigned long wert, bool eins)
    {
      switch(wert)
        {
          case 1:
            if(eins)
              return("eins");
            else
              return("ein");
          case 2: return("zwei");
          case 3: return("drei");
          case 4: return("vier");
          case 5: return("fuenf");
          case 6: return("sechs");
          case 7: return("sieben");
          case 8: return("acht");
          case 9: return("neun");
          case 10: return("zehn");
          case 11: return("elf");
          case 12: return("zwoelf");
          case 13: return("dreizehn");
          case 14: return("vierzehn");
          case 15: return("fuenfzehn");
          case 16: return("sechszehn");
          case 17: return("siebzehn");
          case 18: return("achtzehn");
          case 19: return("neunzehn");
          default: return("-Fehler-");
        }
    }
    
    //*******************************************************
    
    string zehner(unsigned long wert)
    {
      switch(wert/10)
        {
          case 2: return("zwanzig");
          case 3: return("dreissig");
          case 4: return("vierzig");
          case 5: return("fuenfzig");
          case 6: return("sechzig");
          case 7: return("siebzig");
          case 8: return("achtzig");
          case 9: return("neunzig");
          default: return("-Fehler-");
        }
    }
    
    //*******************************************************
    
    string unter100(unsigned long wert,bool eins)
    {
    
      if(wert<20)
        return(unter20(wert,eins));
    
      if(wert%10)
        return(unter20(wert%10,false)+"und"+zehner(wert));
      else
        return(zehner(wert));
    }
    
    //*******************************************************
    
    string unter1000(unsigned long wert, bool eins)
    {
      if(wert<100)
        return(unter100(wert,eins));
    
      if(wert%100)
        return(unter20(wert/100,false)+"hundert"+unter100(wert%100,eins));
      else
        return(unter20(wert/100,false)+"hundert");
    }
    
    //*******************************************************
    
    string tausend(unsigned long wert)
    {
      string s="";
      if(wert>=1000)
        s=unter1000(wert/1000,false)+"tausend";
      if(wert%1000)
        s+=unter1000(wert%1000,true);
      return(s);
    
    }
    
    //*******************************************************
    
    string million(unsigned long wert)
    {
      string s="";
      if(wert>=1000000)
        {
          int mil=wert/1000000;
          if(mil==1)
            s="einemillion";
          else
            s=unter1000(mil,false)+"millionen";
          wert%=1000000;
        }
      return(s+tausend(wert));
    }
    
    //*******************************************************
    
    string milliarde(unsigned long wert)
    {
      string s="";
      if(wert>=1000000000)
        {
          int mil=wert/1000000000;
          if(mil==1)
            s="einemilliarde";
          else
            s=unter1000(mil,false)+"milliarden";
          wert%=1000000000;
        }
    
      return(s+million(wert));
    }
    
    //*******************************************************
    
    string toWord(unsigned long wert)
    {
      if(wert==0)
        return("Null");
    
      string s=milliarde(wert);
      s[0]=toupper(s[0]);
      return(s);
    }
    
    //*******************************************************
    
    int main()
    {
    unsigned long wert;
    
      cout << "Bitte Zahl eingeben:";
      cin >> wert;
      cout << toWord(wert) << endl;
    
            fflush(stdin);
            getchar();
            return 0;
    }
    


  • Gut, jetzt wissen wir dass du von nem Kumpel Code hast, wie der Code ausschaut, dass du was weggestrichen hast und dass es einen Fehler gibt.

    Was wir NICHT wissen:
    Wie schaut DEIN Code jetzt aus?
    Was ist das für ein ominöser Fehler?
    Ist der Kurs Pflicht und musst du den selbständig bestehen?



  • der code sieht momentan genau gleich aus. Ich habe war was probier aber funkt nicht. Ich muss den Code abspecken es hat sachen drinn die ich nicht brauche.
    Ich brauche nur 0-99 nicht milliarden.



  • nami22 schrieb:

    Kann mir jemand den code verkürzen.

    Bei dir fällt mir nichts mehr ein ... 🙂

    Ist eigentlich noch ein Admin aktiv hier in dem Laden?



  • versteh es nicht falsch aber ich kann mich n niemanden wenden ausser an dieses forum wass soll ich alleine machen ich suche im internet doch ne 1:1 lösung findet man nicht. Ich brauche nur tipps wiso das es nicht geht mit diesem CODE

    #include <iostream> 
    #include <string> 
    
    using namespace std; 
    
    string unter20(unsigned long wert, bool eins) 
    { 
      switch(wert) 
        { 
          case 1: 
            if(eins) 
              return("eins"); 
            else 
              return("ein"); 
          case 2: return("zwei"); 
          case 3: return("drei"); 
          case 4: return("vier"); 
          case 5: return("fuenf"); 
          case 6: return("sechs"); 
          case 7: return("sieben"); 
          case 8: return("acht"); 
          case 9: return("neun"); 
          case 10: return("zehn"); 
          case 11: return("elf"); 
          case 12: return("zwoelf"); 
          case 13: return("dreizehn"); 
          case 14: return("vierzehn"); 
          case 15: return("fuenfzehn"); 
          case 16: return("sechszehn"); 
          case 17: return("siebzehn"); 
          case 18: return("achtzehn"); 
          case 19: return("neunzehn"); 
          default: return("-Fehler-"); 
        } 
    } 
    
    //******************************************************* 
    
    string zehner(unsigned long wert) 
    { 
      switch(wert/10) 
        { 
          case 2: return("zwanzig"); 
          case 3: return("dreissig"); 
          case 4: return("vierzig"); 
          case 5: return("fuenfzig"); 
          case 6: return("sechzig"); 
          case 7: return("siebzig"); 
          case 8: return("achtzig"); 
          case 9: return("neunzig"); 
          default: return("-Fehler-"); 
        } 
    } 
    
    //******************************************************* 
    
    string unter100(unsigned long wert,bool eins) 
    { 
    
      if(wert<20) 
        return(unter20(wert,eins)); 
    
      if(wert%10) 
        return(unter20(wert%10,false)+"und"+zehner(wert)); 
      else 
        return(zehner(wert)); 
    } 
    
    //******************************************************* 
    
    string toWord(unsigned long wert) 
    { 
      if(wert==0) 
        return("Null"); 
    
      string s=milliarde(wert); 
      s[0]=toupper(s[0]); 
      return(s); 
    } 
    
    //******************************************************* 
    
    int main() 
    { 
    unsigned long wert; 
    
      cout << "Bitte Zahl eingeben:"; 
      cin >> wert; 
      cout << toWord(wert) << endl; 
    
            fflush(stdin); 
            getchar(); 
            return 0; 
    }
    


  • es geht deshalb nicht weil
    string s=milliarde(wert);
    die funktion erwartet die gelöscht wurde. also ändere diese zeile auch



  • hab ich gändert funkt immer noch nicht?
    Ich habe den fehler markiert ZEILE 58

    #include <iostream> 
    #include <string> 
    
    using namespace std; 
    
    string unter20(unsigned long wert, bool eins) 
    { 
      switch(wert) 
        { 
          case 1: 
            if(eins) 
              return("eins"); 
            else 
              return("ein"); 
          case 2: return("zwei"); 
          case 3: return("drei"); 
          case 4: return("vier"); 
          case 5: return("fuenf"); 
          case 6: return("sechs"); 
          case 7: return("sieben"); 
          case 8: return("acht"); 
          case 9: return("neun"); 
          case 10: return("zehn"); 
          case 11: return("elf"); 
          case 12: return("zwoelf"); 
          case 13: return("dreizehn"); 
          case 14: return("vierzehn"); 
          case 15: return("fuenfzehn"); 
          case 16: return("sechszehn"); 
          case 17: return("siebzehn"); 
          case 18: return("achtzehn"); 
          case 19: return("neunzehn"); 
          default: return("-Fehler-"); 
        } 
    } 
    
    //******************************************************* 
    
    string zehner(unsigned long wert) 
    { 
      switch(wert/10) 
        { 
          case 2: return("zwanzig"); 
          case 3: return("dreissig"); 
          case 4: return("vierzig"); 
          case 5: return("fuenfzig"); 
          case 6: return("sechzig"); 
          case 7: return("siebzig"); 
          case 8: return("achtzig"); 
          case 9: return("neunzig"); 
          default: return("-Fehler-"); 
        } 
    } 
    
    //******************************************************* 
    
    string unter100(unsigned long wert,bool eins) 
    {   //<-------- Hier wird der Fehler angezeigt.
      string s="";
      if(wert<20) 
        return(unter20(wert,eins)); 
    
      if(wert%10) 
        return(unter20(wert%10,false)+"und"+zehner(wert)); 
      else 
        return(zehner(wert)); 
    } 
    
    //******************************************************* 
    
    string toWord(unsigned long wert) 
    { 
      if(wert==0) 
        return("Null"); 
    
      string s=unter100(wert); 
      s[0]=toupper(s[0]); 
      return(s); 
    } 
    
    //******************************************************* 
    
    int main() 
    { 
    unsigned long wert; 
    
      cout << "Bitte Zahl eingeben:"; 
      cin >> wert; 
      cout << toWord(wert) << endl; 
    
            fflush(stdin); 
            getchar(); 
            return 0; 
    }
    


  • Es gibt eine AUSSAGEKRÄFTIGE Fehlermeldung, die du bitte posten sollst!
    Ich sag dir jetzt trotzdem, dass dein Fehler nicht an der markierten Stelle liegt...

    So rufst du auf:

    unter100(wert);
    

    So ist deklariert:

    string unter100(unsigned long wert,bool eins)
    


  • Ich finde es sehr traurig, dass trotz der zahlreichen Hilfestellungen (Tipps / Ansätze, Codes) von gleich mehreren Membern und der Tatsache, dass dir sogar noch ein Kumpel eine Lösung gegeben hat man bei dir, nami22, noch nicht einmal einen Funken Eigeninitiative erkennen kann.

    nami22 schrieb:

    Hier wird der Fehler angezeigt.

    Fehlermeldung?

    Mizars Kristallkugel schrieb:

    Funktionsaufruf:

    string s=unter100(wert);
    

    Die Funktion erwartet aber 2 Argumente:

    string unter100(unsigned long wert,bool eins)
    

    EDIT: Hmpf, zu langsam...



  • was genau muss ich ändert

    Diese Fehlermeldung erscheint:
    --> C:\Users\??????\Desktop\test.cpp In function `std::string unter100(long unsigned int)':



  • s vielleicht...

    string unter100(unsigned long wert,bool eins) 
    { 
    
      if(wert<20) 
        return(unter20(wert,eins)); 
    
      if(wert%10) 
        return(unter20(wert%10,false)+"und"+zehner(wert)); 
      else 
        return(zehner(wert)); 
    } 
    
    //******************************************************* 
    
    string toWord(unsigned long wert) 
    { 
      if(wert==0) 
        return("Null"); 
    
      string s=unter100(wert,eins); 
      s[0]=toupper(s[0]); 
      return(s); 
    }
    


  • 😞 😞
    Du hast jetzt mindestens 1/2 Jahr diesen Kurs (angenommen du bist WIntersemester-Starter, Schüler wäre ja schon fast 3/4 Jahr...), da solltest du das selber sehen. Es stehen die Zeilen direkt übereinander, da sollte man den Fehler sehen.

    Außerdem ist das was du gepostet hast nicht die ganze Fehlermeldung. Das entscheidende hast du nicht gepostet.



  • string unter100(unsigned long wert,bool eins) // hier etwas löschen
    {
    
      if(wert<20)
        [b]return(unter20(wert,eins)); // hier etwas ersetzen
    
      if(wert%10)
        return(unter20(wert%10,false)+"und"+zehner(wert));
      else
        return(zehner(wert));
    }
    

    beschäftige dich mit variablen und argumente der funktionen. nur 2 seiten tutorial - und du hast den code


Anmelden zum Antworten