Array mit Strings ----PROBLEM---
-
Hallo Forum,
ich möchte ein Array der Größe 3 mit 3 strings füllen, die ich dann nachher einzeln abfragen kann.
Wie mache ich das am besten.
Bisher habe ich eine Methode fillArray:
void fillArray () { char* strings [2]; char* name; int n; for (n=0; n<2; n++) { cin >> name; strings[n]= name; } }Und wie steuere ich dann nachher die einzelnen Einträge an?
Vielen Dank
Liebe Grüße
Tina//Edit: Codetags hinzugefügt (evilissimo)
-
Hallo Tina,
so wie du das bisher machst wird das Ganze nicht funktionieren.
Ich würde dir folgendes vorschlagen.#include <iostream> using namespace std; int main() { char strings[3][255]; char name[255]; int i; for(i=0; i < 3; i++) { cin >> name; strcpy(strings[i], name); } for (i = 0; i < 3; i++) cout << strings[i]; return 0; }Wenn du allerdings mit der Standard Template Library schon Erfahrung hast, würde ich dir eine Liste und std::string empfehlen.
PS:
Bitte benutze die Code Tags
Gruss
Tobi
-
und vorallem nochmal den umgang mit char arrays durchgehen!
-
Hey Tobi
Vielen Dank, das funktioniert so. Allerdings weiß ich nicht so ganz, wie ich jetzt auf das erste Element im Array zugreifen kann.Wenn ich jetzt eine Methode habe, die mir den ersten Namen ausgeben soll, wie rufe ich das auf?
char* Array::getFirstName (){ char name = Null; name = strings [1]; cout << name << endl; return name; }Thanx nochmal und vielen Dank für die Hilfe....
Liebe Grüße Tina
-
arrays fangen bei 0 an zu zählen. das erste element eines array ist also immer array[0].
und in deiner funktion sind zwei dinge nicht so ganz sauber:
1. name ist nur ein char (ein einzelnes zeichen), kein array of char (string)
char *name = Null;
2. du gibst die adresse einer lokalen variable zurück. das funktioniert mit glück, wenn der bereich im speicher nicht überschrieben wird. in der regel geht sowas aber schief. entweder machst du sowas mit call by reference
void Array::getFirstName(char *name) { name = strings[0]; cout << name << endl; }oder du benutzt nen pointer und lässt ihn auf den string zeigen
char* Array::getFirstName() { char *name; name = strings[0]; cout << name << endl; return name; }mit den beiden varianten erhältst du allerdings eine referenz auf die strings. das heisst änderungen an name wirken sich auch auf strings aus.
so bekommst du eine kopie:
char* Array::getFirstName() { char *name = new char[strlen(strings[0]) + 1]; // speicher reservieren strcpy(name, strings[0]); // inhalt von strings[0] in den neuen speicher kopieren cout << name << endl; return name; // pointer auf neuen string zurückgeben }//Edit: Codetags hinzugefügt (evilissimo)
-
Hier kann ich mich meinen Vorrednern nur anschließen...
Gruss
Tobi