Wort suchen...



  • Hoi,

    Ich habe eine Frage wie man z.B mit C++ ein wort in einer .txt datei suchen kann...

    z.B

    test soll gesucht werden aber auch in ganzen wörter wie "testit"

    if ( *** == test)
    da findet man ja test... gibt es ne function (möglichkeit) auch wörter zu finden wo test mit drin ist ?

    Habe schon meine gesammten bücher durchschaut aber nicht gefunden !



  • vorschlag: (denke nicht das das sehr gut ist 😉 )
    char für char den buffer duchgehen und auf 't' prüfen und hochzahlen und dann auf 'e' prüfen und hochzählen usw. falls ein anderer buchstabe kommt counter wieder zurücksetzen.



  • falls du brutale speed haben magst, nimm memory mapping und

    #ifndef VHLIB_TEXTSEARCH_H
    #define VHLIB_TEXTSEARCH_H
    #pragma once
    
    // Verfahren aus einer c't übernommen
    
    class TextSearch
    {
    private:
            int shift[256];
            int look_at;
            char *pattern;
            int patternlen;
            char *end;
            char *pos;
    
            char *find(char *text);
    public:
            TextSearch(char *p,int m);
            ~TextSearch();
            char *findFirst(char *text,int size);
            char *findNext();
    };
    
    #endif
    
    #include "TextSearch.h"
    #include <string.h>
    
    TextSearch::TextSearch(char *p,int m)
    {
            patternlen=m;
            pattern=new char[m];
            memcpy(pattern,p,m);
    
            int i;
            for(i=0;i<256;++i)
                    shift[i]=m+1;
            for(i=0;i<m;i++)
                    shift[(unsigned char)pattern[i]]=m-i;
            look_at=0;
            while(look_at<m-1) 
            {
                    if(p[m-1]==p[m-(look_at+2)]) break;
                    ++look_at;
            };
    };
    
    TextSearch::~TextSearch()
    {
            delete[] pattern;
    };
    
    char *TextSearch::findFirst(char *text,int size)
    {
            end=text+size;
            return pos=find(text);
    };
    
    char *TextSearch::findNext()
    {
            return pos=find(pos+1);
    };
    
    char *TextSearch::find(char *text)
    {
            int i;
            char *t=text;
            for(;;) 
            {
                    i=patternlen-1;
                    if(t+i>=end) return 0;
                    while(t[i]!=pattern[i]) 
                    {
                            t+=shift[(unsigned char)t[patternlen]];
                            if(t+i>=end) return 0;
                    }
                    --i;
                    while(t[i]==pattern[i]) 
                    {
                            if(--i<0) return t;
                    }
                    t+=look_at+shift[(unsigned char)t[patternlen+look_at]];
            }
    }
    

    durchschnittliche lösungen hab ich leider nicht.



  • jetzt ist nur die Frage wo man diese textsearch.h erbekommt, wenn man Windows XP Benutzer ist?
    Ich nehme mal an in Linux ist es integriert?



  • Maks schrieb:

    jetzt ist nur die Frage wo man diese textsearch.h erbekommt, wenn man Windows XP Benutzer ist?
    Ich nehme mal an in Linux ist es integriert?

    😕 textsearch.h ist von volkard und diese findest du ein post über deinem



  • Entweder ich kapier die Frage nicht oder so geht es am einfachsten:

    // Testdatei Zeile für Zeile einlesen...
    
    string str = "abcdefghi";
    string::size_type pos = str.find (def,0);
    if (pos != string::npos) {
      cout << "juchu, gefunden" << endl;
    }
    

Log in to reply