strcat: Wie bekomme ich ein Leerzeichen in meinen String?
-
Hallo,
ich habe vor 3 Tagen mit C++ angefangen, dazu habe ich mir wxDev-C++ installiert und als Lektüre habe ich mir von Helmut Erlenkötter "C++: Objektorientiertes Programmieren von Anfang an" gekauft.So, nun hab ich den ersten Abschnitt durch und mich einer der ersten Übungsaufgaben gestellt die ich auch lösen konnte, jedoch habe ich dazu eine Frage.
Hier erstmal mein Programm:
#include <cstdlib> #include <iostream> #include <cstring> using namespace std; int main(int argc, char *argv[]) { char Text1[15], Text2[15], Text3[30]; cout << "Bitte geben Sie Ihren Vornamen ein: "; cin >> Text1; cout << "Bitte geben Sie Ihren Nachnamen ein: "; cin >> Text2; strcpy(Text3,Text1); strcat(Text3,Text2); cout << "Ihr Name lautet: " << Text3 << endl; system("PAUSE"); return EXIT_SUCCESS; }Wenn ich nun in der Konsole als Vornamen Max und Nachnamen Muster eingebe, wird die Zeichenkette zusammengeschrieben ausgegeben > MaxMuster.
Wie kann ich zu meiner Variable Text1 ein Leezeichen mit dran hängen bzw. kann das direkt in der Funktion strcat übergeben werden?
Cheers, Cosmo.
-
Cosmo schrieb:
Wie kann ich zu meiner Variable Text1 ein Leezeichen mit dran hängen bzw. kann das direkt in der Funktion strcat übergeben werden?
So: " "
P.S: Objektorientiert von Anfang an? Na klar...

-
strcpy(Text3,Text1); strcat(Text3," "); strcat(Text3,Text2);
-
Nein, strcat kann dies nicht. Du müsstest
Text1oderText3zuerst ein Leerzeichen einfügen. Dabei aber jeweils noch darauf achten, dass du nicht über die Speichergrösse schreibst. Also ca. so:size_t length = strlen(Text1); strcpy(Text3, Text1); Text3[length] = ' '; Text3[length + 1] = '\0'; // Null Terminierung wieder einfügen strcat(Text3, Text2);Aber grundsätzlich ist das recht dumm, wenn man dies so in C++ löst. Denn das ist grundsätzlich C und nicht C++! In C++ gäbe es dafür extra die Klasse
std::string. Wenn ich dein Programm mal umschreibe:#include <string> #include <iostream> int main(int argc, char *argv[]) { cout << "Bitte geben Sie Ihren Vornamen ein: "; std::string firstname; cin >> firstname; cout << "Bitte geben Sie Ihren Nachnamen ein: "; std::string lastname; cin >> lastname; std::string output = firstname + ' ' + lastname; cout << "Ihr Name lautet: " << output << endl; return 0; }Hier musst du auch nicht mehr darauf achten, dass die Speichergrenzen überschritten werden könnten. Im vorherigen Codebeispiel, wenn man mehr als 14 Zeichen eingeben würde, gäbe es undefiniertes Verhalten. Das ist hier nicht der Fall. Wenn du auch noch Leerzeichen einlesen möchtes, wäre vielleicht auch noch
std::getlineinteressant.Also der Titel des Buches ist die reinste Lüge. Das ist weder C++ noch objektorientiert von anfang an.
Grüssli
-
Wow, das ging ja schnell. Vielen Dank euch allen.
Also das geht:
strcat(Text3," ");Die Methode von Dravere mit std::string output = firstname + ' ' + lastname; gefällt mir allerdings auch recht gut, ich wusste bisher gar nicht das es String Variablen in C++ gibt, komisch das davon im Buch gar nichts steht bzw. erwähnt wird.
Was für Literatur könnt ihr einem Einsteiger denn sonst noch so empfehlen? Ich habe mir das Buch vom Erlenkötter gekauft da dieses in einigen Foren sehr oft empfohlen wurde. Ich habe gestern noch dieses hier http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2313 von Jürgen Wolf gefunden, kommt allerdings erst im Februar 2011 raus.
-
Cosmo schrieb:
Ich habe gestern noch dieses hier http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2313 von Jürgen Wolf gefunden, kommt allerdings erst im Februar 2011 raus.
Vergiss Jürgen Wolf Bücher.
http://www.c-plusplus.net/forum/272350Wir haben hier eine verdammt schlechte Meinung von diesem Mann und seinen Büchern. Meiner Meinung nach zurecht ...

Hier sind ein paar Empfehlungen: http://www.c-plusplus.net/forum/251551
Und wenn du in diesem Subforum suchst, dann wirst du noch allerhand andere Empfehlungen finden. Was wohl auch nötig ist, weil leider der empfohlene C++ Primer in Deutsch nicht mehr verfügbar ist.
Grüssli
-
Ok, danke für den Hinweis. Ich werde mir den Thread mal anschauen sowie nach anderen Büchern hier im Forum suchen.
Cheers, Cosmo.
-
Cosmo schrieb:
Die Methode von Dravere mit std::string output = firstname + ' ' + lastname; gefällt mir allerdings auch recht gut, ich wusste bisher gar nicht das es String Variablen in C++ gibt, komisch das davon im Buch gar nichts steht bzw. erwähnt wird.
Irgendwie muss ja das ++ auch seine Berechtigung haben.
Sonst wäre es ja C.