Speicherbereich durchsuchen



  • Ok, das Problem hier ist wiederum das man nur nach einem "Char" im Array suchen kann und nicht nach Zeichenketten oder seh ich das falsch?



  • Das wird nicht funktionieren. Wenn dann mit: http://www.cplusplus.com/reference/algorithm/search.html



  • Nehmen wir an ich hab eine Char-Array mit folgendem Inhalt:

    Hallo wie gehts dir?
    

    Und möchte folgendes suchen bzw dessen Position:

    wie
    

    Wie kann ich das anstellen?
    Ich versteh die Funktion nicht.



  • In etwa so:

    const char *str = "Hallo wie gehts dir?";
    const char* findstr = "wie";
    int len1 = strlen( str );
    int len2 = strlen( findstr );
    
    const char* p = std::search( str, str+len1, findstr, findstr+len2 );
    

    Dabei ist anzumerken das die memcmp Methode ganz wesentlich schneller sein kann.



  • Wenn die Anwendung nicht so zeitkritisch ist, kannst du das bequemer und sicherer mit std::string und std::string::find() bzw. std::string::substr() lösen (allgemein mit Filestreams). Wenns auf die Performance ankommt (was wahrscheinlich ist), bist du aber mit den C-Funktionen besser beraten.



  • Nexus schrieb:

    Wenn die Anwendung nicht so zeitkritisch ist, kannst du das bequemer und sicherer mit std::string und std::string::find() bzw. std::string::substr() lösen (allgemein mit Filestreams). Wenns auf die Performance ankommt (was wahrscheinlich ist), bist du aber mit den C-Funktionen besser beraten.

    Sagt wer? Quelle?



  • Kommt auf die jeweilige Implentation an (sowohl STL als auch CRT). Aber in vielen Fällen dürfte es zutreffen das, für spezielle Fälle optimierte, Lösungen ganz wesentlich schneller sind, als das allgemeine Vorgehen bei vielen STL Implementationen.



  • David_pb schrieb:

    Kommt auf die jeweilige Implentation an (sowohl STL als auch CRT). Aber in vielen Fällen dürfte es zutreffen das, für spezielle Fälle optimierte, Lösungen ganz wesentlich schneller sind, als das allgemeine Vorgehen bei vielen STL Implementationen.

    hab das grad mal im Turbo C++ 2006 mit nem 350 kb textdatei getestet.
    eine recht simple und naive c-like suche gegen std::search
    500 durchlaeufe und dann jeweils den schnellsten hergenommen.

    c-like : std::search -> 1 : 4

    der suchstring war pascal-like am ende der datei angefuegt, damit er auf jeden fall gefunden wird ;o) die laenge des gesuchten strings war 4 bytes.

    Meep Meep



  • Ich sag doch, das kommt stark auf die Situation (und/oder die jeweilige Implementation) an. 🙂



  • Tachyon schrieb:

    Sagt wer? Quelle?

    Naja, das hab ich jetzt mal angenommen 😉
    Ich hab mir einfach überlegt, wenn direkt auf dem Speicher Operationen durchgeführt werden und keine Zeit für eine sichere Speicherverwaltung und benutzerfreundliche Funktionen benötigt werden (also C-Style), ist man wahrscheinlich leicht schneller. C++ tut ja das auch, was C kann, aber hat zusätzlich noch andere Funktionalitäten, die die Performance belasten...


Anmelden zum Antworten