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 ausN
char
s ist ein zusammenhängender Speicherbereich ausN
Bytes. Einstd::string
ist eine klasse, die irgendwieeine 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::string
der 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 4char
s 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::string
der 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 4char
s 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
str
im 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.