2 Stimmen

Manipulation des zugrundeliegenden String-Objekts mit Stringstream

Ich bin neu in C++ und jongliere noch mit Stringstream. Ich habe einen kleinen Teil des Codes geschrieben, der nicht die gewünschte Ausgabe liefert Der Code lautet wie folgt:

#include "iostream"
#include "sstream"

using namespace std;
int main ()
{
   string xyz;
   cout << "Initial xyz : " << xyz << endl;
   stringstream s1 ( xyz );
   s1 << "Hello";
   cout << "Final xyz : " << xyz << endl;
}

Ausgabe:

Initial xyz : 
Final xyz : 

Mein Verständnis ist stringstream arbeitet als Wrapper um ein String-Objekt.daher einmal stringstream mit einem String-Objekt initialisiert wurde, wird jede Schreiboperation auf dem Stream das zugrunde liegende String-Objekt beeinflussen.also, wenn ich schreibe "Hallo" zu Stream und drucken Sie die Zeichenfolge xyz, es sollte "Hallo" angezeigt. Dies scheint jedoch nicht der Fall zu sein. Kann mir bitte jemand sagen, wo ich falsch liege und wie ich die zugrundeliegende Zeichenkette mit stringstream manipulieren kann? Vielen Dank im Voraus! Vimal

5voto

Dewfy Punkte 22558

Es ist kein Wrapper. Es weist ein eigenes String-Objekt im Inneren zu. Aber Sie können Ihre xyz zuweisen:

s1 << "Hello";
xyz = s1.str();

0voto

Puppy Punkte 141483

Stringstream ist ein Wrapper um ein String-Objekt - sein eigenes internes String-Objekt. Sie können ihn nicht so einstellen, dass er eine externe Zeichenkette umhüllt, denn das wäre äußerst unsicher.

0voto

Stephane Rolland Punkte 36818

Es ist kein Wrapper für eine Zeichenkette, es ist ein Strom . (genau wie man über einen Audiostream sprechen kann)

Damit können Sie eine virtuelle Zeichenkette fast genauso manipulieren wie eine Datei. Durch sequentielles Hinzufügen von Daten oder sequentielles Lesen von Daten.

Hier ist die cplusplus-Referenz für Stringstream

Und wenn Sie die konstruierte Zeichenkette verwenden wollen, rufen Sie str() auf.

Übrigens, eine der häufigsten Verwendungen von Stringstream ist die Verwendung als Stringkonverter. Es sollte vor allen atoi itoa Sachen bevorzugt werden.

0voto

Vimal Punkte 21

Vielen Dank für Ihre schnellen Antworten. Mein Verständnis ist jetzt : -> Wenn eine Zeichenkette als Stream behandelt werden muss (z.B. zur Vereinfachung der Extraktion), dann erstellen Sie ein neues Stringstream-Objekt und initialisieren Sie es mit der Zeichenkette Der Stream kopiert den Inhalt der Zeichenkette in seine eigene interne Zeichenkette Jede nachfolgende Schreiboperation auf dem Stream hat keine Auswirkungen auf die ursprüngliche Zeichenkette.

-> Wenn jedoch eine völlig neue Zeichenkette erstellt werden muss, erstellen Sie einfach ein leeres stringstream-Objekt, ohne es mit einem String-Objekt zu initialisieren, schreiben Sie in den Stream und verwenden Sie anschließend die str()-Methode von stringstream, um den Inhalt der Zeichenkette von stream in Ihre eigene Zeichenkette zu kopieren. Ich habe dies wie folgt ausprobiert und es funktioniert gut.

#include "iostream"
#include "sstream"

using namespace std;
int main ()
{
   stringstream s1;
   s1 << "Hello";
   string xyz = s1.str();
   cout << "Final xyz : " << xyz << endl;
}

Auf jeden Fall ist meine ursprüngliche Frage zufriedenstellend gelöst worden. Nochmals vielen Dank.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X