Array mit String vergleichen
-
bitte?

also nochmals, ganz kurz: ich möchte in einer for-schleife das ganze array uCon überprüfen, ob ein gewisser string bereits vorhanden ist. wie geht das?
-
Mal ganz davon abgesehen, dass du ja den String einfach so in das Array reinschreibst und den String der vorher drinstand überbügelst.
Benutz doch eine StringList das ist um einiges dynamischer.
for ( int i = 0; i <= x; i++ ) { if ( str1 == arr[i] ) break; //der String ist vorhanden else { if(i == x) //der letzte Eintrag und bis jetzt noch nix gefunden { füge den String an... } } };PS: Ich hoffe ich habs mit den CodeTags hinbekommen

-
Hallo,
Warum packst du nicht deine Strings in eine TStringList und suchst in derern Eigenschaft Text ?
-
meine version und somit auch die von Peter (ausser ich sehe da was falsch) geht somit nicht.
for(int x = 0; x < 5; x++) { if(uCon[x] != ADRESSE) { uCon[x] = ADRESSE; } else { //.... } }denn wenn nur schon der erste eintrag nicht gleich ist, wird der string ins array geschrieben. was aber wenn der string irgendwo weiter unten auftauchen würde? ich muss hald einach eine methode haben womit ich das ganze array auf einen string abfragen kann, wenn keine identifikation gefunden wurde, schreibe den string ins array. wurde eine identifikation gefunden? führe else anweisung aus.
-
Hi
Ein Beispiel mit der VCL:
AnsiString SubString = "hallo"; TStringList * pSL = new TStringList; //StringList füttern if (pSL->IndexOf(SubString) < 0) pSL->Add(SubString); delete pSL;mfg pera
-
hmm ich versteh das nicht. ich habe es nun mit TStringList versucht.
was möchte ich machen? eine art only-one-ip-per-session funktion
also sobald sich ein client zum programm connected wird seine IP adresse in ein array/liste gespeisst, vorausgesetzt sie existiert noch nicht. alles ok, client verbunden, keine else anweisung. hat der client sein programm noch offen und macht einen zweiten connect, sieht das server programm nun das irgendwo im array/liste seine ip bereits ist, führe else anweisung aus...TStringList *aConnected; ADRESSE = Client->GetPeerAddr(); int INDEX = aConnected->IndexOf(ADRESSE); if(!aConnected->Find(ADRESSE,INDEX)) { /* Die IP Adresse ist noch nicht in der liste. hinzufügen... Versucht der benutzer nun einen zusätzlichen connect, so sollte nach dem prüfen, else kommen... */ } else { /* Aha, IP Adresse existiert nun irgendwo in der liste. der benutzer hat also kein recht auf einen zweiten connect... */ }hm

-
du solltest dich erstmal mit grundstrukturen der programmierung auseinandersetzen imho ....
so wie du das beschrieben hast checkst du genau ein Eintrag und mehr net !!!
[ Dieser Beitrag wurde am 25.04.2003 um 10:43 Uhr von 1ntrud0r editiert. ]
-
dattel:
Du solltest dir, wie auch in deinem anderen Thread schon empfohlen, die jeweilige Eigenschaft oder Methode genau in der Hilfe ansehen!IndexOf ist alles was du brauchst, um zu prüfen, ob ein String bereits in einer StringList enthalten ist.
-
hmmm

dann müsste das theoretisch gehen, aber will nicht
(beispiel von para)TStringList * aCon = new TStringList; ADRESSE = Client->GetPeerAddr(); if(aCon->IndexOf(ADRESSE) < 0) { aCon->Add(ADRESSE); MessageBox(Handle,"ok geaddet","",48); } else { MessageBox(Handle,"bereits connected","",48); } delete aCon;
-
bool schonconnected = false; for(int x = 0; x < 5; x++) { if(uCon[x] == ADRESSE) { schonconnected = true; } else { //.... } } if(!schonconnected) // neu eintragenso ich hoff du hast nu verstanden wie du das machen kannst ...
Beispielhaft natürlich !!!!!!!
-
hmm das geht doch auch nicht? denn
if(!schonconnected)
wird ja immer erst nach der schleife ausgeführt. somit wäre die inkrementation von x immer an letzter position. denn es müsste ja sein..:
if(!schonconnected)
{
}
-
ich dachte ich hätte es aber war nichts.
int x; bool schonconnected = false; String uCon[5]; for(int x = 0; x < 5; x++) { if(uCon[x] == ADRESSE) { schonconnected = true; } else { break; } } if(!schonconnected) { uCon[x] = ADRESSE; }menno, das müsste doch gehen??
-
hi
Nochmal:
//in deinen header unter private TStringList *pSL; //in Constructor oder OnCreate deiner Form pSL = new TStringList; //wo auch immer if (pSL->IndexOf(ADRESSE) < 0) { pSL->Add(ADRESSE); //Verbindung zulassen } else { //Verbindung NICHT zulassen } //in Destructor oder OnClose delete pSL;
-
danke pera dies scheint nun zu klappen. keine ahnung was ich vorher falsch gemacht habe

jetzt muss ich natürlich noch dafür sorgen das wenn der client disconnected, die IP adresse wieder aus der liste verschwindet. wollte das wie folgt machen:
ADRESSE = Client->GetPeerAddr(); int INDEX = pSL->IndexOf(ADRESSE); if(pSL->IndexOf(ADRESSE) < 0) { pSL->Delete(INDEX); }das scheint aber nicht zu klappen. wenn ich jetzt erneut mit dem client connecte, lässt mich der server nicht rein. die ip adresse müsste ja aber aus der liste entfernt sein.
-
hi
löschen:
pSL->Delete(pSL->IndexOf(ADRESSE)); //oder mit Prüfung if (pSL->IndexOf(ADRESSE) >= 0) pSL->Delete(pSL->IndexOf(ADRESSE));Ich möchte nicht altklug klingen, aber denoch solltest du das hier mal gelessen haben: http://www.junix.ch/bcb/help/
mfg pera
[ Dieser Beitrag wurde am 25.04.2003 um 11:47 Uhr von pera editiert. ]
-
