String Array Problem
-
Kann mir jemand sagen, wie ich auf einzelne Elemente eines Strings in einem Array zugreifen kann?
Beispiel:
string* pTest;
pTest = new string [100];Was muss ich nun tun, wenn ich zB. in Buchstabe 3 des 5. Strings zugreifen will? Mit pTest[3][5] scheint es nicht zu funktionieren...
-
du hast ja nur ein eindimensionales array... also geht nicht foo[...][...]!!!!
z.B.:
foo[100] = "HALLO, DU NASE";
cout << foo[10]; //Ausgabe: N
-
Ja, aber dieses Array besteht aus Strings, welche selbst wiederum eine Art Array darstellen, auf welches man mit dem [] Operator zugreifen kann. Ich würde gern wissen, wie ich jetzt an einzelne Elemente dieser Strings dran komme...
-
ich geh davon aus, dass du den std::string meinst:
mit
pTest = new string [100];
legst du ein Array von 100 Strings an.
Da sich die Stringklasse selber um den Speicher kümmert, kann jedem dieser 100 Strings eine beliebige Zeichenkette zugewiesen werden, z. B.:
pTest[56] = "Hallo Welt";
auf die einzelnen Buchstaben wird dann über die entsprechenden Methoden der String-Klasse zugegriffen:
pText[56].at(3)
Allerdings weiss ich jetzt auch nicht, ob für jeden der 100 Strings der
Destruktor aufgerufen wird, wenn der Speicher von pText mit delete[] freigegeben
wird. Aber vermutlich schon.mfg
Martin
-
leech schrieb:
du hast ja nur ein eindimensionales array... also geht nicht foo[...][...]!!!!
Falsch. Da er ein Array von Strings hat gibt die erste Dimension bereits einen String zurück, worauf die 2.Dimension einen char innerhalb des Strings anspricht (operator[])
pTest[4][2]; gibt dir das 3. Zeichen des 5. Strings zurück.
-
Falsch. Da er ein Array von Strings hat gibt die erste Dimension bereits einen String zurück, worauf die 2.Dimension einen char innerhalb des Strings anspricht (operator[])
pTest[4][2]; gibt dir das 3. Zeichen des 5. Strings zurück.Gerade das scheint nicht zu funktionieren. Wenn ich zB. sage:
pTest[4][2] = AnderesArray[0];
dann schreibt er irgendwie in jeden String an Stelle 2 den Buchstaben hin.Das mit dem at(3) kannte ich noch nicht. Muss ich mal testen...
-
anonymus schrieb:
Allerdings weiss ich jetzt auch nicht, ob für jeden der 100 Strings der
Destruktor aufgerufen wird, wenn der Speicher von pText mit delete[] freigegeben
wird. Aber vermutlich schon.Ja, wird er.
Kurz zusammenfasst:string* s = new string[N]; // N Aufrufe des Default-Konstruktors for(int i=0; i < N; i++) s[i] = "muh"; // N Aufrufe des Zuweisungsoperators delete[] f; // N Aufrufe von Destruktoren der Klasse std::string
-
5(0rP schrieb:
Falsch. Da er ein Array von Strings hat gibt die erste Dimension bereits einen String zurück, worauf die 2.Dimension einen char innerhalb des Strings anspricht (operator[])
pTest[4][2]; gibt dir das 3. Zeichen des 5. Strings zurück.Gerade das scheint nicht zu funktionieren. Wenn ich zB. sage:
pTest[4][2] = AnderesArray[0];
dann schreibt er irgendwie in jeden String an Stelle 2 den Buchstaben hin.Das mit dem at(3) kannte ich noch nicht. Muss ich mal testen...
Muss es aber. Zeig uns deinen Code.
-
string* list; list = new string[irgendnezahl]; int CopyString(int a, int z, int sentence) { int temp; temp=0; for(int i = a; i<z; i++) { list[sentence][temp] = ptemparray[i]; cout << list[sentence][temp]; temp+=1; } }
Das Ding soll eigentlich einen Satz von a bis z aus dem ptemparray in list kopieren. Das dumme ist, wenn ich das list Ding auslesen will, macht der erste index überhaupt nichts... es kommt immer das gleiche raus.
-
Hmmm, ich komme einfach nicht weiter. Bevor der Post ganz unten verschwunden ist, wollte ich einfach nur noch mal fragen, ob jemand noch ne Idee hat. Ansonsten nerv ich euch net weiter und frag woanders
-
ein paar dumme Fragen am Rande:
was ist denn ptemparray?
sind ptemparray und list[] gefüllt?
ich kann es zwar sehen, aber sag' doch noch einmal selber was die Fkt copyString() denn so machen soll.
folgendes Bsp funktioniert aber bei mir:string* list; string ptemparray = "0123456789"; void CopyString(int a, int z, int sentence){ int temp=0; for(int i = a; i<z; i++,temp++){ list[sentence][temp] = ptemparray[i]; cout << list[sentence][temp]; } } int main(){ list = new string[5]; list[0] = "WAS SOLL DAS DENN HIER?"; CopyString(5,9,0); delete []list; return 0; }
//ist zwar alles nicht so schön (vor allem die globalen Vari, but it work's