die anzahl der teilstrings in einer zeichenkette bestimmen



  • ahja, ok

    ich hab mal was probiert:

    int CountWrds(AnsiString asString, AnsiString asSubString)
    {
        int iCount = 0;
        int iPos;
    
        while((iPos = asString.Pos(asSubString)) > 0)
        {
          asString.Delete(iPos, asSubString.Length());
          iCount++;
        }
    
        return iCount;
    }
    

    ist das die schnellste lösung?



  • Auch auf die Gefahr hin mich "unbeliebt" zu machen 😃
    Ich würde ungefähr so was preferieren, zuwas progged man schließlich C und nicht Pascal oder Basic 😉
    Beispiel:

    char *p, *pmstr, *ptstr;
    int counter;
    AnsiString mainstr="alles scheisse deine elli und nochmal alles scheisse deine elli";
    AnsiString teilstr="elli";
    
    pmstr=mainstr.c_str();
    ptstr=teilstr.c_str();
    for(counter=0; (p=strstr(pmstr, ptstr))!=NULL; counter++, pmstr=p+1);
    // counter enhält hier die Anzahlo der gefundenen Teistrings
    

    Man beachte, hier werden keine Schreibzugriffe in den AnsiString vorgenommen und Lesen ist ja nicht verboten :p



  • hehe, auch net schlecht 😉
    aber was is jetzt schneller bei größeren texten (strings)?

    das ganze soll nämlich später auf ne datei angewendet werden.



  • Peter schrieb:

    Man beachte, hier werden keine Schreibzugriffe in den AnsiString vorgenommen und Lesen ist ja nicht verboten :p

    Das ist auch in den seltensten Fällen das Problem. Das Problem ist vielmehr, dass sich der mit c_str() ermittelte Zeiger radikal ändern kann, wenn ein anderer String da reingepackt wird. Ich dachte ich hätte dir das mal erklärt? (o;

    -junix



  • @junix
    *LOL* Das ist mir schon bewusst, in kritischen Fällen empfiehlt sich deshalb ja auch ein AnsiString::Unique, aber darüber brauchen wir nicht mehr diskutieren. Ich meinte diese Bemerkung ja auch ein wenig ironisch in Bezug auf diesen Thread in welchem ich etwas für "Aufregung" sorgte 😉



  • mmmh ob du mich richtig verstanden hast? Auch der Lesende Zugriff auf einen mit c_str() ermittelten Zeiger ist nicht unkritisch.

    -junix



  • 🙂 .. ich denke zu wissen, was man bei AnsiString und Pointern beachten muß und wann .. 🙂



  • Du ja. Aber obs ein Anfänger oder ein fortgeschrittener Anfänger weiss? )o:

    -junix



  • Okay, das ist dann ein anderer Aspekt 👍
    Aber in meinem Beipiel oben wird es bestimmt keine Probleme geben es sei denn, ich habe noch einen groben logischen Fehler drinnen 😉



  • ...oder schlechtes Multithreading... ...oder andere blöden nebeneffekte... oder...

    -junix



  • Jou, das könnte aber auch bei einem "normalen" C-String passieren 🙄
    Aber Du weißt ja selber, es gibt fast nix wwas es nicht gibt 🤡


Anmelden zum Antworten