Strings addieren...



  • str[0] ist ein char. Wenn du chars addierst, addierst du ihre Zahlenwerte. Du solltest str.substr(0, 1) verwenden.



  • Mmh..stimmt irgendwie. Hab' ich denn alles vergessen! Und wie kann ich dann die Zeichen aneinanderhängen, wenn es so nicht geht?

    Das funktioniert dann ja auch nicht:

    void ways(string str)
    {
    	int len = str.length();
    	for(int i = 1; i < len; i++) {
    		string tmp = str[0] + str[i]; //Fehler!
    

    Vielen Dank
    lg, freakC++



  • Oh, da war ich wohl ein paar Sekunden zu langsam. Nochmal: str.substr(0,1) + str.substr(i,1).



  • Wie vorgeschlagen mit substr oder string(1, str[0]) + string(1, str[i]);



  • #include <iostream>
    #include <string>
    
    int main()
    {
    	std::string str = "ABCD";
    
    	int i = 2;
    
    	std::string tmp;
    
    	// Falsch: 
    	//tmp = str[0] + str[i];
    
    	// Richtig:
    	tmp += str[0];
    	tmp += str[i];
    
    	std::cout << tmp << std::endl;
    
    	return 0;
    }
    


  • Danke für die Antworten!

    Warum ist das mit "tmp" dann falsch? Warum muss tmp erst wieder den Wert von sich selber zugewiesen bekommen?

    edit: Vielleicht habe ich es einfach vergessen oder mir fällt es gerade nicht ein ein, aber was macht diese Funktion: string(1, str[0])

    Konvertiert die das? Ich kann mich daran nicht erinnern. Was soll die 1?

    lg, freakC++



  • freakC++ schrieb:

    Warum ist das mit "tmp" dann falsch? Warum muss tmp erst wieder den Wert von sich selber zugewiesen bekommen?

    Du brauchst eine Addition von String ( = Konkatenation) statt einer Addition von chars ( = fasse char als Ganzzahltyp auf und addiere). char + char ist eine char-Addition, string + string eine Konkatenation und string + char auch eine Konkatenation.



  • // Alternativ:
    tmp = std::string(1, str[0]) + std::string(1, str[i]); // Die 1 als erster Parameter ist wichtig!
    

    Ich finde das aber sehr unschön. Mit dem Operator += geht das um einiges besser.

    Weil es die Zahlen als int interpretiert und die beiden Zahlen addiert.

    ASCII für A (str[0]) ist = 65
    ASCII für C (str[2]) ist = 67

    65 + 67 = 132

    Und diese 132 als char interpretiert ergibt auf meinem Computer ein ä.



  • freakC++ schrieb:

    edit: Vielleicht habe ich es einfach vergessen oder mir fällt es gerade nicht ein ein, aber was macht diese Funktion: string(1, str[0])

    Konvertiert die das? Ich kann mich daran nicht erinnern. Was soll die 1?

    http://www.cplusplus.com/reference/string/string/string/



  • Danke 😃

    lg, freakC++


Anmelden zum Antworten