String vs Array
-
Hallo erstmal

Muss für meine anstehende Klausur wissen ob ich das richtig verstanden habe.
Ein string besteht aus mehreren char. Er ist fast identisch mit einem char Array, aber stellt eine eigene Klasse da. Die größe des Strings wird nicht festgelegt.
Ist das so richtig und gibt es noch andere grundlegende und wichtige Unterschiede?
lg
Klotz
-
Klotz schrieb:
Ein string besteht aus mehreren char. Er ist fast identisch mit einem char Array, aber stellt eine eigene Klasse da. Die größe des Strings wird nicht festgelegt.
std::string? Was soll "fast identisch mit einem char Array" bedeuten? ein Array ausNchars ist ein zusammenhängender Speicherbereich ausNBytes. Einstd::stringist eine klasse, die irgendwie
eine Zeichenkette repräsentiert und Memberfunktionen zum Umgang mit diesen Daten bereitstellt.~*) Ja, der Standard spezifiziert das genauer ...~
-
[quote="Swordfish"]
Klotz schrieb:
Was soll "fast identisch mit einem char Array" bedeuten?
using namespace std;
string str = "Text";
char str[4] = {'T', 'e', 'x', 't' };
führt doch zum selben Resultat?
-
Klotz schrieb:
Muss für meine anstehende Klausur
Welcher Schultyp?
-
Klotz schrieb:
using namespace std; string str = "Text"; char str[4] = {'T', 'e', 'x', 't' };führt doch zum selben Resultat?
Nope. Das eine ist ein
std::stringder selbst seine Länge kennt und auch so lieb ist, dir die Länge perstd::string::length()mitzuteilen, seinen Speicher selbst (dynamisch) verwaltet und bei bedarf wächst.
Das andere ist ein Array aus 4chars dessen Elemente'T','e','x', und't'sind. Eine Funktion, die einen üblichen C-String (Nullterminiert) erwartet könnte damit genau garnichts anfangen.
-
heiho schrieb:
Klotz schrieb:
Muss für meine anstehende Klausur
Welcher Schultyp?
FH, Informatik für EIT. Habe Informatik nur ein Semester, deshalb wird auf viele Details nicht so eingegangen.
-
Swordfish schrieb:
Klotz schrieb:
[cpp]using namespace std;
string str = "Text";
char str[4] = {'T', 'e', 'x', 't' };
führt doch zum selben Resultat?
Nope. Das eine ist ein
std::stringder selbst seine Länge kennt und auch so lieb ist, dir die Länge perstd::string::length()mitzuteilen, seinen Speicher selbst (dynamisch) verwaltet und bei bedarf wächst.
Das andere ist ein Array aus 4chars dessen Elemente'T','e','x', und't'sind. Eine Funktion, die einen üblichen C-String (Nullterminiert) erwartet könnte damit genau garnichts anfangen.Vielen Dank, dass hilft mir beim Verständnis sehr weiter

-
Klotz schrieb:
Vielen Dank, dass hilft mir beim Verständnis sehr weiter

Glaub' ich nicht. Was ist der Unterschied zwischen
char str[4] = {'T', 'e', 'x', 't' }; // und char str[] = "Text";?
-
Swordfish schrieb:
Klotz schrieb:
Vielen Dank, dass hilft mir beim Verständnis sehr weiter

Glaub' ich nicht. Was ist der Unterschied zwischen
char str[4] = {'T', 'e', 'x', 't' }; // und char str[] = "Text";?
Gut das sind ja jetzt auch die Arrays

Glaub ist nur eine unterschiedliche Deklaration. Array besteht ja aus Feldern - die Anzahl der Felder muss mann doch beim Erzeugen des Arrays mit angeben. Das letztere ist auch erlaubt? Noch nie wirklich vorher gesehen

-
Klotz schrieb:
Glaub ist nur eine unterschiedliche Deklaration. Array besteht ja aus Feldern - die Anzahl der Felder muss mann doch beim Erzeugen des Arrays mit angeben.
Ja. Entweder explizit in den eckigen Klammern oder implizit durch die Anzahl der angegebenen Initializers.
Klotz schrieb:
Das letztere ist auch erlaubt? Noch nie wirklich vorher gesehen

Ja. Aber das interessante ist, das
strim zweiten Fall fünf Elemente hat, weil"Text"ein C-String (Nullterminierung!) ist und als{ 'T', 'e', 'x', 't', '\0' }interpretiert wird. Somit kann man auch die Länge herausfinden, wie lang das Ding ist, wenn man nur einen Pointer auf das erste Element hat (google: array to pointer decay). Bei deiner Version ist das unmöglich.