Probleme mit Feldern



  • Hi!

    Habe folgende Funktion geschrieben:

    #include <iostream>
    
    using namespace std;
    
    void ctob(char *a)
    {
    	char *b, *c, *d;
    	int count=0, i=0;
    	b=a;
    
    	while(*(b++))
    		count++;
    
    	c=new char[count+1];
    	sprintf(c,"%i",count);
    
    	for(int i=0; i<(count+1); i++)
    		c[i+1]=a[i];
    
    	b=a;  // hier ist mein Problem, wie kann
              // ich die Länge vorne einfügen
    
    }
    
    int main()
    {
    	char *z = "Hallo";
    
    	cout << z << endl;
    
    	ctob(z);
    
    	cout << z << endl;
    
    	return 0;
    }
    

    Diese soll die Länge eines Strings messen und diese vor den String in den String reinschreiben. Nun, die Länge bekomme ich heraus, wandele Sie mit sprintf in ein ascii - Zeichen - nur wie schreib ich das dann an den Anfang der Zeichenkette??

    Gruß
    Tobi



  • Zunächst mal, char* z="Hallo"; ist ein string-literal und das ist Konstant. Da darfst du garnichts reinschreiben.

    Dann würde ich das ganze wohl so machen (ungetestet):

    void ctob(char* z, size_t max)
    {
      size_t len = strlen(z);
      char* temp = new char[len+1];
      strcpy(temp,z);
      snprintf(z, max, "%i%s", len, temp);
      delete[] temp;
    }
    
    char z[20];
    strcpy(z,"Hallo");
    ctob(z, 20);
    

    Aber lieber in C++:

    #include <string>
    #include <stringstream>
    
    string ctob(const string& s)
    {
      stringstream tmp;
      tmp << s.length() << s;
      return tmp.str();
    }
    
    string z = "Hallo";
    z = ctob(z);
    


  • Danke! Aber

    #include <stringstream>

    kennt mein Compiler nicht. Geht's auch anders?



  • nimm <sstream>



  • Danke! Es klappt! 🙂


Anmelden zum Antworten