zahl in string konvertieren



  • Ich stehe grad auf dem Schlauch. Kann mir jm ein Tipps geben?
    Es geht um die Umwandlung von unsigned int nach string
    ein Programmteil ist vorgegeben

    #include <string>
    using namespace std;
    int main(){
    
    string str="";
    unsigned int i = 0;
    
    str << i << 123; //Hier soll str = "0123" sein
    
    }
    

    Die Aufgabe besteht darin die Zahlen irgendwie auf string zu schieben
    Man soll ein Funktion zu diesem Programm erstellen um eine Konvertierung von unsigned int in string zu ermöglichen.
    String ströme sowie c++ standard methode sind nicht erlaubt

    Das Überladen von Ausgabeoperator ist hier nicht möglich denke ich, aus dem Grund dass man in lhs kein ostream hat, sondern string
    Bitte um Tipps

    MfG



  • Operatoren können als freie Funktion überladen werden.

    Auf die Schnelle das gefunden: https://www.c-plusplus.net/forum/232010-full

    Reicht dir das, oder was brauchst du noch?



  • allgemein gilt, dass 12345 = 1*10^4 + 2*103+3*102+4*101+5*100.
    wenn du also die einzelnen ziffern haben willst, teile durch die entsprechende zehnerpotenz.

    um das ganze in zeichen umzuwandeln musst du nur noch '0' bzw. 48 zur ziffer hinzu addieren.



  • HansKlaus schrieb:

    allgemein gilt, dass 12345 = 1*10^4 + 2*103+3*102+4*101+5*100.
    wenn du also die einzelnen ziffern haben willst, teile durch die entsprechende zehnerpotenz.

    um das ganze in zeichen umzuwandeln musst du nur noch '0' bzw. 48 zur ziffer hinzu addieren.

    Hi Danke für die schnelle Rückmeldung

    Es geht hier darum
    so ein Ausdruck hinzubekommen
    str << 123;
    zurzeit meckert der compiler wegen diese << operator ( keine überallstimmung von string mit unsigned int)
    Diese Methode ist mir bekannt
    aber in meinem Fall weiß ich nicht wie ich es umsetzen soll bzw ist das möglich so umzusetzen wie Sie das meinen?

    Ich gebe doch direkt die Nummer rein und schiebe diese auf ein String Variable,
    wie soll das denn mittendrin noch die Berechnung und umformung von zahl zu Ziffer folgen?

    Vielleicht habe ich die Aufgabenstellung falsch verstanden
    Deswegen hier in Originalform:

    Gegeben ist ein Programmfragment, das eine Konvertierung von Zahlen vom
    Datentyp unsigned int in den Datentyp string vornehmen soll:

    #include <string>
     using namespace std ;
    int main () {
     unsigned int zahl=0;
     string ziffernString ("") ;
    
     ziffernString << 123 << zahl ; // "1230"
    
     return 0 ;
     }
    

    Vervollstandigen Sie das Programmfragment durch eine geeignete Funktion,
    so dass es die geforderte Aufgabe ohne Verwendung von (String-)Stromen
    erledigt und den im Kommentar angegebenen String produziert. Ihre Implementation
    darf keine anderen C++ Funktionen aufrufen und soll moglichst
    speicherezient sein.

    Die Aufgabe stammt aus einer Probeklausur für TI, dafür auch ziemlich wenig Punkte, und bereitet für mich schon große Schwierigkeit.



  • Hi schrieb:

    Operatoren können als freie Funktion überladen werden.

    Auf die Schnelle das gefunden: https://www.c-plusplus.net/forum/232010-full

    Reicht dir das, oder was brauchst du noch?

    Reicht nicht
    Meinen Sie, dass ich die Ausgabesoperator überladen soll ?
    wenn nicht dann was genau ?



  • ja den zuweisungsoperator überladen und dann oben erwähnte methode anwenden.

    edit: nicht den zuweisungsoperator, sondern den "<<" (wenns denn geht, kenn mich mit c++ grad nicht so aus)



  • Benutz halt nen stringstream wenn du das so lösen willst.



  • Ach, Stringströme sind nicht erlaubt!

    Das hätt ich jetzt echt nicht gedacht!



  • template<typename T>
    std::string& operator<<(std::string& str, T i)
    {
    	string s;
    	do
    	{
    		s.insert(s.begin(),i%10+'0');
    	} while(i/=10);
    	return str+=s;
    }
    


  • dref schrieb:

    template<typename T>
    std::string& operator<<(std::string& str, T i)
    {
    	string s;
    	do
    	{
    		s.insert(s.begin(),i%10+'0');
    	} while(i/=10);
    	return str+=s;
    }
    

    das klappt.
    Ich dachte der Ausgabeoperator kann nur auf lhs ein Strom aufnehmen,daher bin ich nicht auf die Idee gekommen, string zu nehmen.
    Vielen Dank 👍


Anmelden zum Antworten