Zahl in Wort umwandeln



  • DANKE VIEL MAL VIEL VIEL MAL ICH KONNTE ES LÖSEN ICH SCHULDE DIR WAS

    MFG NAMI



  • [Edit] Ich kann jetzt schon das Edit-Label benutzen, weil ich mich dermaßen über solche User wie nami22 aufrege, dass ich etwas sehr Unfreundliches loslasse, das ich danach wegeditieren werde, weil dann wieder irgendwelche Ritter der Gerechtigkeit auf mich stürmen.



  • kein kOMMENTARFÜR DEIN [edit]

    VIELEN DANK FÜR DIE HILFE



  • nami22 schrieb:

    ICH KONNTE ES LÖSEN

    Verdammt! Gerade wo es so spannend wurde. Na ja, nutze ich die Regenpause um einkaufen zu gehen ... 😃

    Die nächste Aufgabe kommt bestimmt ...



  • egon2 schrieb:

    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

    Wozu braucht man die Bibliothek sstream?



  • Shivan schrieb:

    Wozu braucht man die Bibliothek sstream?

    Für std::stringstream s. Siehe in dem von dir geposteten Code die folgenden Codezeilen:

    istringstream is(zahlen);
    /* ... */
    is >> ausgabe;
    

    Weitere Infos: http://www.cplusplus.com/reference/iostream/stringstream/



  • nami22 schrieb:

    DANKE VIEL MAL VIEL VIEL MAL ICH KONNTE ES LÖSEN ICH SCHULDE DIR WAS

    MFG NAMI

    Ich? *hust hust*



  • Danke Mizar 🙂



  • [edit]wie dumm mus man sein xD
    Nimmt mich under welcher idiot von unserer klasse das war ...
    ***Yv.....***

    mfg
    emanuell



  • Nein es war nicht Yves^^



  • Hier ist ein Code der auch wirklich funktioniert, doch ich verstehe nicht alles, kann mir jemand helfen?

    #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)
    { 
      string s="";      
      if(wert<20) 
        return(unter20(wert,true)); 
    
      if(wert%10)      //wert%10  Was bewirkt dies?
        return(unter20(wert%10,false)+"und"+zehner(wert));  //wird +"und"+ nur gebraucht um das und reinzumachen?
      else 
        return(zehner(wert)); 
    } 
    
    string zuWort(unsigned long wert) 
    { 
      if(wert==0) 
        return("Null"); 
    
      string s=unter100(wert,true); 
      s[0]=toupper(s[0]);  //Was passiert hier?
      return(s);
    } 
    
    int main() 
    { 
    unsigned long wert; 
    
      cout << "Bitte Zahl eingeben (0 - 99):"; 
      cin >> wert; 
      cout << zuWort(wert) << endl; 
    
    fflush(stdin);
    getchar(); 
    return 0; 
    }
    

    Ich habe die verschiedenen Stellen markiert, bei denen ich Probleme habe, wäre echt nett, wenn mir jemand helfen könnte.

    MfG Shivan



  • if(wert % 10) // wert%10  Was bewirkt dies?
    

    Das ist der Modulo-Operator. Es ist eine Division, aber als Ergebnis erhält man den Rest eben dieser.

    return(unter20(wert % 10, false) + "und" + zehner(wert)); //wird +"und"+ nur gebraucht um das und reinzumachen?
    

    Jo, der Ausdruck "unter20(wert % 10, false)" repräsentiert einen std::string. Auf diesen kann der + Operator angewandt werden, somit können damit Strings verkettet werden. ( http://www.cplusplus.com/reference/string/operator+/ ).

    s[0] = toupper(s[0]); // Was passiert hier?
    

    Indexoperator ist dir klar? Dann http://www.cplusplus.com/reference/clibrary/cctype/toupper/



  • nimm doch ma nen debugger und guck es dir an?!

    bb



  • Danke, hat sehr geholfen! 🙂

    unskilled schrieb:

    nimm doch ma nen debugger und guck es dir an?!

    bb

    Hmm.. hab den glaub ich noch nie verwendet, wie funktioniert das?



  • #include <iostream>
    
    using namespace std;
    string IntAsString(int zahl)
    {
       string u20[20]={"Null","Ein","Zwei","Drei","Vier","Fuenf","Sechs","Sieben","Acht","Neun","Zehn","Elf","Zwoelf","Dreizehn","Vierzehn","Fuenfzehn","Sechzehn","Siebzehn","Achtzehn","Neunzehn"};
       string zehner[9]={"Zwanzig","Dreissig","Vierzig","Fuenfzig","Sechzig","Siebzig","Achtzig","Neunzig"};
       if(zahl<20)
       {
          if(zahl==1) return u20[zahl]+"s";
          return u20[zahl];
       }
       else
       {
          int zi=zahl/10-2;
          if (zahl%10)
          {
             string ausgabe=u20[zahl%10];
             string z=zehner[zi];
             z[0]=tolower(z[0]);
             return ausgabe+"und"+z;
          }
          return zehner[zi];
       }
    }
    int main(int argc, char* argv[])
    {
       for(int i=0;i<100;i++)
       {
          cout << IntAsString(i) << endl;
       }
       return 0;
    }
    


  • Auja, ein Wettbewerb, wer es kürzer hinbekommt:

    #include <iostream>
    #include <string>
    using namespace std;
    
    string foo(int i)
    {
    	string e[]={"","ein","zwei","drei","vier","fuenf","sechs","sieben","acht","neun","zehn","elf","zwoelf","dreizehn","vierzehn","fuenfzehn","sechzehn","siebzehn","achtzehn","neunzehn"};
    	string z[]={"","","zwanzig","dreissig","vierzig","fuenfzig","sechzig","siebzig","achtzig","neunzig"}; 
    	string u[]={"","und",""};
    	return u[2]=e[i>19?i%10:i]+(i==1?"s":"")+u[i%10&&i>20?1:0]+z[i/10],u[2][0]=toupper(u[2][0]),i==0?"Null":u[2];
    }
    
    int main()
    {
    	for(int i = 0; i < 100; ++i)
    		cout << foo(i) << endl;
    }
    

    😉



  • Jetzt könnte man noch aus den 3 arrays eins machen und schon hat man eine zweizeilige funktion. Das Gesicht des Profs will ich sehn 😃



  • Auja, ein Wettbewerb, wer es kürzer hinbekommt:

    Ja aber dann müsste man sich auch die Mühe machen, und mal einen Compiler versuchsweise drüberlaufen lassen. 😃



  • wtf schrieb:

    Jetzt könnte man noch aus den 3 arrays eins machen und schon hat man eine zweizeilige funktion. Das Gesicht des Profs will ich sehn 😃

    Hast Recht 🙂

    string foo(int i)
    {
    	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];
    }
    


  • Beat this!

    #include <iostream>
    #include <string>
    
    int main()
    {
        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",""};
        for(unsigned int i(0); i != 100 && std::cout<<(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])<<std::endl; ++i);
    }
    

Anmelden zum Antworten