SubString (strtok?)



  • Ich hab ne Zeichenkette (sieht so in etwa aus, wie *a) - ich hab nen bestimmtes Zeichen, wo ich das ganze Trennen will (hier " |ASD|") - allerdings scheint strtok nur ein Zeichen nehmen zu können, wo man trennen will (z.bsp. "|" oder so) - außerdem will ich den "muell" am Ende nicht haben, weil kein " |ASD|" dahinter ist - da gibts aber keinen Unterschied - zumindest für die Funktion ist es egal, ob muell oder muell |asd| da steht...
    Gibt es noch ne andere Funktion, die das vll eher kann, was ich such? Allgemein würde mich ne Übersicht der ganzen Funktionen mal schwer begeistern - sonst muss ich immer die _str.h durchgucken... 😕 Und das ist ja ne sooo effektiv ^^

    Hier der Test-Quelltext:

    char *a = "teil1 |ASD|teil2 |ASD|teil drei ist laenger |ASD|muell";
      char *found;
      found = strtok (a, " |ASD|");
      if (found)
      	printf("%s\n", found);
      while (found)
       {
        found = strtok (NULL, " |ASD|");
        if (found)
    	printf("%s\n", found);
       };
    

    Danke,
    Tom



  • Hallo

    strtok ist eine alte C-Funktion. Schon der C++ bietet mit den string-Methoden und std::vector wesentlich besser Möglichkeiten.
    Aber da du hier im Builder-Forum fragst empfehle ich dir anstelle der std::string-Methoden die AnsiString-Methoden, insbesondere Pos.

    bis bald
    akari



  • Danke - aber Strings wollt ich ne verwenden - wo find ich die std::string-Methoden denn? (also ne übersicht oder so?)

    Tom



  • Hallo

    Danke - aber Strings wollt ich ne verwenden

    Warum? Und wenn du keine Builder-spezifischen Sachen benutzen willst warum postest du dann im BCB-Forum?

    wo find ich die std::string-Methoden denn? (also ne übersicht oder so?)

    Hier. Da empfiehlt sich std::string::find.

    bis bald
    akari



  • Weil ich eigtl auf VS umsteigen wollte 🤡 Aber da ich noch bcb nutz dachte ich, ich bleib mal hier im Forum ^^ Warum keine Strings: Hab mir eingebildet, dass die vom Speicherplatz her mehr belegen, als char* und auch sonst ne so schnell sind - das macht zwar bei 100 Strings noch nix aus, die aller 10 Sekunden mal gelesen und überschrieben werden, aber wahrscheinlich machts bei 1000den (zum Teil sehr kurzen) schon was aus?!

    Ansonsten Danke für die schnelle und gute Hilfe 🤡

    Tom



  • Hallo

    Nur so als Info : std::string und AnsiString ähneln sich sehr vom Speicherlayout. Und unter Umständen können ordentliche String-Klassen auch schneller und effizienter sein als C-Strings sein, grade weil sie die Länge des Inhalts mit speichern.

    bis bald
    akari


Anmelden zum Antworten