Strings addieren...
-
Hallo zusammen,
ich steh gerad wieder völlig auf dem Schlauch. Ich habe einen String. Der lautet meinetwegen "ABCD". Nun möchte ich, dass an den ersten Buchstaben je alle anderen Elemente angehängt werden. Es soll hier also das rauskommen:
AB
AC
ADLeider gibt mir mein Programm Zahlen aus und ich weiß nicht warum:
int len = str.length(); for(int i = 1; i < len; i++) { cout << str[0] + str[i] << endl; //Ausgabe einer Zahl. Wenn ich einen "Summanden" weglasse, dann funktionierts }
Was mache ich falsch?
edit: Ich konnte mein Problem gerade lösen. Ich muss den << Operator hier verwenden. Aber warum? Kann ich an der Stelle nicht zwei Strings addieren? Hä?
Vielen Dank
lg, freakC++
-
str[0] und str[i] sind keine Strings, sondern Zeichen. Diese kannst du addieren und tust es auch, aber das hängt sie nicht aneinander.
-
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 = 6765 + 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?
-
Danke
lg, freakC++