Array mit String vergleichen
-
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. ]
-
