PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cout



sven1978
23-07-2003, 19:14
Wenn ich bei cout mit strings arbeite und 2 hintereinader schreibe zb:
cout << "\n"<<string1<<" "<<string2;

ist bei jedem string ein Zeilensprung inklusive also die ausgabe ist jetzt:
string1
string2
ich will aber

string1 string2 string3.....

gibt es da einen extra befehl?

BLUESCREEN3D
23-07-2003, 19:19
Original geschrieben von sven1978
Wenn ich bei cout mit strings arbeite und 2 hintereinader schreibe zb:
cout << "\n"<<string1<<" "<<string2;

ist bei jedem string ein Zeilensprung inklusive also die ausgabe ist jetzt:
string1
string2
ich will aber

string1 string2 string3.....

das liegt nicht daran, dass es strings sind, sondern daran, dass deine strings anscheinend einen zeilenwechsel enthalten...

probier mal folgendes:


string1.erase(string1.length()-1,1);
string2.erase(string2.length()-1,1);
cout << endl << string1 << " " << string2;

dadurch solte bei beiden strings das letzte zeichen (der zeilenwechsel) gelöscht werden

Berufspenner
23-07-2003, 19:22
Hi@all

http://www.cplusplus.com/ref/cstring/strcat.html
http://www.cppreference.com/cppstring_details.html#append

Cu
André

BLUESCREEN3D
23-07-2003, 19:24
@berufspenner:

was soll er mit funktionen zum verbinden von strings? das würde nichts daran ändern, dass zeilenwechsel drin sind...

Berufspenner
23-07-2003, 19:28
Original geschrieben von BLUESCREEN3D
@berufspenner:

was soll er mit funktionen zum verbinden von strings? das würde nichts daran ändern, dass zeilenwechsel drin sind... Leuchtet ein :rolleyes: Ich war nur hiervon leicht ein wenig irretiert/abgelenkt
string1 string2 string3..... Cu
André

Edit: Strings enthalten doch auch wie CharArrays ein Terminierung ('\0' )?!

sven1978
23-07-2003, 19:30
Das muss ich dann in meine Klasse einbauen oder(die strings sind private)

Auserdem ist das letzt zeichen nicht \0?Also stringende

BLUESCREEN3D
23-07-2003, 19:33
Original geschrieben von sven1978
Das muss ich dann in meine Klasse einbauen oder(die strings sind private)

Auserdem ist das letzt zeichen nicht \0?Also stringende

ist die 1. zeile eine frage? welche klasse? erase ist in der string-klasse schon enthalten

ein string hoert immer mit NULL auf - wenn vor dem NULL ein zeilenwechsel ist, dann ist da eben ein zeilenwechsel...

@letzte 2 wörter: ???????????????????????????????

am besten postest du mal den ganzen quellcode :D

wraith
23-07-2003, 19:40
Original geschrieben von Berufspenner

Edit: Strings enthalten doch auch wie CharArrays ein Terminierung ('\0' )?!
std::string?Nein müßen sie nach Standard nicht,aber ich kenne keine std::string Implementierung,die intern nicht mit Nullterminierten char-Arrays arbeitet.
Aber man sollte sich nicht darauf verlassen,genauso wie man sich nicht darauf verlassen sollte,daß der unterliegende Speicher von std::string durchgängig ist.

BLUESCREEN3D
23-07-2003, 19:42
Original geschrieben von wraith
std::string?Nein müßen sie nach Standard nicht,aber ich kenne keine std::string Implementierung,die intern nicht mit Nullterminierten char-Arrays arbeitet.
Aber man sollte sich nicht darauf verlassen,genauso wie man sich nicht darauf verlassen sollte,daß der unterliegende Speicher von std::string durchgängig ist.

im zweifelsfall kann man ja auf string.c_str() zurückgreifen - da kriegt man definitiv ein NULL-Byte am ende...

anda_skoa
24-07-2003, 10:00
Original geschrieben von wraith
std::string?Nein müßen sie nach Standard nicht,aber ich kenne keine std::string Implementierung,die intern nicht mit Nullterminierten char-Arrays arbeitet.
Aber man sollte sich nicht darauf verlassen,genauso wie man sich nicht darauf verlassen sollte,daß der unterliegende Speicher von std::string durchgängig ist.

Das letzte Zeichen auf das man von außen Zugriff hat (length()-1) ist sicher nicht das \0 das möglicherweise in der internen Implementation benutzt wird.

Ciao,
_

sven1978
24-07-2003, 12:22
also ich habe mir jetzt eine funk geschrieben die den String ohne Zeilenwechsel ausgibt. Ich uebberpruefe einfach jeden einzelnen charakter und gebe ihn aus wenn er nicht das stringende ist (10).soweit ich weiss ist die 10 das ende zeichen.
Und das funktioniert jetzt auch.(alles muss man selber machen)