Einem String ein char zuweisen

Hallo!

Ich möchte in einem C++ Konsolenprogramm mit 2 Strings folgendes machen:

1 string x;
2 string y=„abc“;
3 x[0]=y[0];
4 cout

Hallo Vitali,

Ich möchte in einem C++ Konsolenprogramm mit 2 Strings
folgendes machen:

1 string x;
2 string y=„abc“;
3 x[0]=y[0];
4 cout x[0] ist ein char

x ist ein string.
mit
x[0]=y[0];
kopierst du nur das erste Zeichen aus y, welches das „a“ ist.

Fehlt da ein End-Zeichen?

Genau!

Damits ein String ist müsstest du folgendes machen, wenns denn zeichenweise sein soll:

x[0]=y[0];
x[1]=’\0’;

MfG Peter(TOO)

Hi Peter,

Genau!

Nein !

Damits ein String ist müsstest du folgendes machen, wenns denn
zeichenweise sein soll:

x[0]=y[0];
x[1]=’\0’;

ebenfalls nein. Die Länge eines std::string wird nicht bei Setzen eines einzelnen seiner chars auf char(0) verändert. Will man so wie der UP vorgehen, so muss man den String vorher resizen, z.B. mit x.resize(1). Sowohl im Code des UP als auch in deinem Code ist die Länge des Strings 0, weshalb auch nichts ausgegeben wird.

Gruss
norsemanna

Also wird beim deklarieren

string x;

die Stringlänge auf 0 gesetzt und beim hinzufügen eines Zeichens nicht verändert?
Da es sich hierbei um einen String und keinen C-String handelt, habe ich erwartet das die Größe dynamisch ist und sich ohne resize() anpasst. Falsch?
Ausserdem: ist die Endkennung „/0“ nicht nur für C-Strings?

Danke
Vitali

Hi Vitali,

string x;
die Stringlänge auf 0 gesetzt und beim hinzufügen eines

ja, „“ also Länge 0 ist der Default.

Zeichens nicht verändert?

beim Hinzufügen wird die Groesse sehr wohl verändert, nur … hast du nichts hinzugefügt, sondern nur auf einen Speicherbereich des std::string zugegriffen.

std::string x = "x";
std::string y = "y";
std::string a = x + y;

erzeugt einen String „xy“. Hierbei wird einer Kopie von x der Wert von y hinzugefügt … (x bleibt unverändert)

Ausserdem: ist die Endkennung „/0“ nicht nur für C-Strings?

\0 oder char(0) ist das Endezeichen fuer c-Strings. Allerdings sind die std::string’s damit auch terminiert, damit man sie per .c_str() Member in Methoden verwenden kann, welche z.B. einen „const char*“ erwarten.

Gruss
norsemanna

1 Like

sieh dir das genau an. x und y sind dabei vom Typ std::string. c ist ein char, so, wie du es eigentlich wolltest:

#include
#include

int main(int argc, char* argv[]){

std::string y(„abc“);
std::cout
Verstehst Du, welcher Konstruktor mit std::string x(1,y[0]);
aufgerufen wird? Sieh dir an, wie c in C++ über den Konstruktor von char initialisiert werden kann. Und bitte, using namespace std; schön abgewöhnen! Es ist sicherer.

Ende
Danke an alle für eure Antworten!