Array mit String vergleichen



  • hi.

    habe folgendes problem. ich möchte ein string array mit einem einzelnen string vergleichen. wurde im gesamten array der string nicht gefunden, dann soll etwas passieren ansonsten...
    also ich habe hier folgendes:

    for(int x = 0; x < 5; x++)
        {
            if(uCon[x] != ADRESSE)
            {
                uCon[x] = ADRESSE;
            }
            else
            {
                //....
            }
        }
    

    wenn jetzt z.B. an position 1 der string nicht gefunden wurde, also != dann wird er ja hinzugefügt. hier habe ich schon das erste problem. was wenn er aber doch noch auftaucht, so an postiton 4 z.B. dann hätte ich ja nicht adden dürfen. das zweite problem: else sollte eigentlich wirklich nur erst dann ausgeführt werden wenn der string irgendwo im kompleten array gefunden wurde, also ==

    so, kann mir jemand helfen? 😕



  • Hallo dattel,

    mal sehen ob ich dich richtig verstanden habe.

    AnsiString str1;
    AnsiString arr[x];
    
    for ( int i = 0; i < x; i++ )
    {
      if ( str1 == arr[i] )
        // tue irgendetwas
      else
        // mache etwas anderes
    };
    

    Sollte so funktionieren, wenn es
    das ist was du wolltest.
    Wenn es nicht klappt oder ich dich falsch
    verstanden habe melde dich einfach nochmal.

    Bye Peter.



  • 😕 versteh ich nicht. das ist das das selbe was ich habe nur anstatt != hald ==



  • ich möchte ein string array mit einem einzelnen string vergleichen. wurde im gesamten array der string nicht gefunden, dann soll etwas passieren ansonsten

    du erklärst dich doch selber



  • 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 eintragen
    

    so 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. ]



  • 🤡 😋


Anmelden zum Antworten