Enthält string/Element eines Vectors einen wert ?
-
Hey ho,
Ich weiß nicht ob es eine dumme Frage ist , vielleicht ist die Antwort auch total simple zu leicht um draufzukommen aber :
String Name=dict [0];
wie kann ich jetzt testen ob das element dict [0] eines Vectors etwas entält also beschrieben ist und somit auch der string einen wert enthält oder ob beide leer sind ?
Hoffe ihr versteht meine Frage
-
Toa schrieb:
Hoffe ihr versteht meine Frage
Nicht wirklich

Ein Vector-Element ist entweder vorhanden (sein Index ist < Größe) oder eben nicht.
Ob das gespeicherte Element "leer" ist, hängt ganz davon ab, was Du als "leer" definierst. Bei einem String eignet sich "der leere String" (Größe 0) gut dafür. Aber das hat nichts mit dem Vector zu tun, sondern mit dem im Vector gespeicherten Datum.
-
naja indem du dir einfach mal den vector ausgeben lässt.
entweder per hand
cout<<dict[0]; cout<<dict[1]; ...oder per schleife
for( int i=0;i<dict.size();++i) { cout<<dict[i]<<endl; }
-
Alles klar dann versuch ich es besser zu Erklären
Also :
Ich lese in einen Vector(3) der 3 strings definiert , die namen eines Verzeichnises ein. In dem Verzeichniss befinden sich jetzt z.b nur 2 elemente d.h nur 2 strings des vectors werden beschrieben , so jetzzt gebe ich alle aus :
cout << dic [0] <<-- //usw;
dann habe ich einen Navi Cursor siehe oben den Pfeil , so wenn man nun auf den ausgegebenen string klickt also an der stelle des Cursors enter drückt soll entweder wenn der String etwas enthält leer ausgegeben werden oder das er nicht leer ist ... Die ganzen SAchen mit dem PFeil und so gehen muss nur noch den letzden part wissen wie er prüft ob das element beschrieben ist oder nicht
Edit zu Beitrag drüber :
Ja ich lass sie ja auch ausgeben aber dann wenn man halt enter drückt soll wenn er beschrieben ist je nachdem leer oder voll ausgegeben werden.
MFG Toa xD
-
Du schreibst leicht konfus. Strukturier das mal besser

Ob ein String "belegt" ist findest Du raus, indem Du string.size() auf 0 prüfst. Wenn dict[n] ein String ist also dict[n].size() == 0.
-
Alles klar danke , werde ich testen .. melde mich dann wieder

Ja ich weiß das ich sehr Konfus schreibe das liegt aber auch daran das ich sehr Durcheinander bin und oft auch ziemlich auf dem Schlauch beim Programmieren stehe und die leichtesten Dinge nicht hinbekomme
..MFG Toa
-
ist mit purem c++ nicht möglich ...
-
LordJaxom schrieb:
Du schreibst leicht konfus. Strukturier das mal besser

Ob ein String "belegt" ist findest Du raus, indem Du string.size() auf 0 prüfst. Wenn dict[n] ein String ist also dict[n].size() == 0.
Super geklappt , thx !!!
-
Wieso hat dein Vector immer 3 Strings ?
Normalerweise wenn du nur 2 Verzeichnisse einliest, dann hat dein vector auch nur 2 Elemente.
Wenn du dann beim nächsten Durchlauf 3 Verzeichnisse einliest, dann hat dein vector 3 Elemente.Dann brauchst du auch nicht zu fragen, ob der gelesene string.size == 0 ist.
-
Ich lese aber in einer Schleife ein Verzeichnis ein , eigentlich würde dieses Verzeichnis komplett eingelesen werden aber ich möchte nur 3 files aus dem verzeichniss also mach ich eine for schleife die 3 ma durchläuft ... deswegen vector mit 3 strings .. warum einen undefinierten Vector nehmen wenn man weiß wieviele FIles eingelesen werden. Außerdem brauch ich die abfrage ob der Vector beschrieben ist nicht für das Einlesen sondern Für etwas anderen und mit size() Klappt das alles 1 A ! .. .also THX @ ALL ... wobei ein Prob hab ich ja eigentlich noch , naja ich zeig euch mal den Code vielleicht könnt ihr mir helfen ^^
DIR* handle; struct dirent* entry; vector< string > directory_list(3); int count=0; std::string extension(".sav"); handle = opendir( "Saves\\" ); if ( !handle ) { cerr << "Error: Verzeichnis konnte nicht gefunden werden!" << std::endl; return -1; } for (dirent* entry = readdir(handle); entry && directory_list.size() <= 3; entry = readdir(handle)) { std::string tmp_name(entry->d_name); if (tmp_name != "." && tmp_name != ".." && tmp_name.find_last_of(extension) == tmp_name.length() - extension.length()) directory_list.push_back(tmp_name); } closedir( handle );und hier die ausgabe :
// Umlagerung string slot1 = directory_list[ 0 ]; string slot2 = directory_list[ 1 ]; string slot3 = directory_list[ 2 ]; // Ausgabe : cout <<" " << slot1 << "\t\n"; cout <<" " << slot2 << "\t\n"; cout <<" " << slot3 << "\t\n";Das Problem ist nun leider das keine files mehr eingelesen werden , also die schleife soll aus dem verzeichnis nur files mit der endung .sav laden , komischer weiße werden jetzt gar keine files mehr eingelesen ! JEmand ne Idee ?