Dieser blöde String, er will sich nicht zusammensetzen lassen



  • Hallo,

    ich habe eien Function geschrieben in der ein String zusammengesetz wird da irgendwie bekomme ich nur ein Smily vlt könnt ihr euch das mal angucken:

    string bin (int zahl)
    {
             string hallo;
             char test;
     while(zahl>0){      
      int rest;
    
      string ausgabe;
      rest = zahl % 2;
      zahl = zahl -rest;
      if (zahl!=0) zahl = zahl / 2;
      test<< rest;
      ausgabe = ausgabe + test;
     // cout << rest;
      hallo = ausgabe;
    }
     return hallo;       
    }
    

    wenn ich das über eine normal cou ausgabe nacheinander in der gleichen Zeile einfach ausgeben lasse geht das ja. Und wie bekomme ich das hin das wenn der End string kürzer als 8 ist das er solange nullen vore ranstellt bis es echt stellen sind?

    Danke



  • ICh habe zwar keine Ahnung, was dieser Codeabschnitt genau machen soll, doch ein offensichtlicher Fehler besteht darin, dass du sowohl rest als auch ausgabe in der While-Schleife deklarierst, wodurch die nachstehenden Codezeilen überflüssig werden, da bei einem neuen Schleifendurchlauf die Werte der Variablen "überschrieben" werden.



  • sascha_ow schrieb:

    test<< rest;
    

    Diese Zeile bewirkt nichts. Wenn du verrätst, was sie deiner Meinung nach tun soll, kommen wir der Sache vielleicht näher.



  • ich wollte das test = der string von der zahl die in rest steht ist. Also für die Delphileute: test := InttoStr(rest); und dann das die eizelnen reste voreinander gestellt werden. Um ascii zu binär.



  • ich hab meinen 1. fehler selbst gefunden jetzt muss ich nur noch wissen wie ich die länge einen strings rausfinde. ich mache das zu den fehler jetzt mi itos



  • Ich hab zwar noch immer keine Ahnung was der Codeabschnitt machen soll, aber hier zu deiner Frage:

    string s = "foo";
        cout<<"Der String: "<<s<<" besteht aus " <<s.length()<<" Zeichen."<<endl;
    

    Das sind übrigens absolute Basics... (--> Tutorial, oder besser Buch durchnehmen?)



  • mein code mach aus dezimalen zahlen binärezahle



  • Wenn du nur das machen willst, dann probier doch mal itoa aus, das wandelt dir ein int in einen zahl jeder beliebiger Basis um und gibt sie als char* zurück

    char buffer[30]; //maximale Größe deiner Zahl
      itoa(i, buffer, 2); //gibt eine Zahl mit der Basis 2 aus (Binärzahl)
      string s = buffer;
    


  • Und wenn du einen string zusammensetzen willst, nimm besser einen stringstream oder ähnliches

    #include <stringstream>
    using namespace std;
    
    stringstream s;
    int i = 5;
    char c = 'a';
    s << c << " Test " << i;
    string string = s.str();
    


  • std::string IntToBinary
      (int iNum)
    {
    	std::string oTemp;
    	int iBitPos = 1 << sizeof (int) - 1;
    
    	while (iBitPos)
    	{
    		int iBit = (iNum & iBitPos) ? 1 : 0;
    
    		if (iBit || oTemp.length())
    			oTemp += iBit;
    
    		iBitPos >>= 1;
    	}
    
    	return oTemp;
    }
    

    Nicht getestet, nur schnell ausgedacht.

    *edit*
    @Klausi: ach mit itoa geht das auch 🙄
    @sascha_ow: Vergiss was ich geschrieben habe 😛

    *edit2*
    @Klausi: Dein char-Array ist 3 Byte zu klein (32 Bit + Null)

    besser:

    char cBuffer[sizeof (int)*8 + 1];
    itoa (i, cBuffer, 2);
    string s = cBuffer;
    


  • itoa was das alles kann^^ wusste ich nict habe vor 2 tagen mit c++ angefangen vorher 12 jahre delphi...danke


Anmelden zum Antworten