Kompliziertes durchsuchen eines strings!
-
hallo,
ich lasse mir mit hilfe einer WinApi-Funktion alle Dateien/Ordner
auflisten - fakt ist ich möchte eine Datei suchen!ich habe also Zugriff auf die Dateinamen und muss diese nun mit
meinem Suchargument vergleichen und überprüfen ob was übereinsstimmt.mein suchargument kann allerdings auch so aussehen wie bei der
windows-suche:*test*.txtergebisse wären also z.B.
Hallo[b]Test[/b]du[b].txt[/b] Wer[b]Test.txt[/b] [b]test.txt[/b] [b]test[/b]haha[b].txt[/b]wie kann ich also einen string so durchsuchen das er diese
möglichkeiten findet? gibt es da "zufällig" bereits eine
gegeignete string-funktionen?bin dankbar für rückmeldungen!

-
Im Standard gibt es das nicht - aber such mal nach "reguläre Ausdrücke" (oder "regular Expression")
-
Hallo,
Was du suchst ist:
find aus den C++-Strings
http://www.cppreference.com/cppstring/index.html
und FindFirstFile, FindNextFile
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/findfirstfile.asp
Ich denke schon, dass es eine Biblothek dafür geben wird, aber ob du sie findest ist eine andere Sache. Ich kenne derzeit keine. Also bau dir selber einen Algorithmus, aber achte auf die Effizienz. Wenn du jedes Mal temporäre Objekte nur neue Variablen anlegst, wird es ziemlich kritisch

MFG winexec*
-
-
ja super jetzt hab ich mich schon drangesetzt und hab ne
funktion selber geschrieben
int bs(char* src,char* search) { int j=0; int stlen_search=0; for(int i=0;i<(int) strlen(search);i++) if(search[i]!='*') stlen_search++; if(stlen_search>(int)strlen(src)) return 0; for(i=0;i<(int)strlen(src);i++) { if(search[j]=='*') { while(src[i]!=search[j+1]) { if(search[j+1]=='*') { j++; continue; } i++; } i--; } else { if(src[i]<91 && src[i]>64 || src[i]<123 && src[i]>96) { if(search[j]<91 && search[j]>64 || search[j]<123 && search[j]>96) { if(src[i]!=search[j] && src[i]-32!=search[j] && src[i]!=search[j]-32) return 0; } else return 0; } else { if(search[j]<91 && search[j]>64 || search[j]<123 && search[j]>96) return 0; else { if(src[i]!=search[j]) return 0; } } } j++; } return 1; }ich weis sie ist ein wenig lang aber für meine zwecke reichts ja.
würd mich freuen wenn ihr sie mal ausprobieren und unter mängel
nehmen würdet
also ausser übersichtlichkeit und schnelligkeit kann ich erstmal
keine mängel entdecken
wär aber auch net sauer wenn ihr nicht durch den code durchblickt erstmal

Beispiel:
bs("HalloDu.txt","*allo*.txt");danke euch!
-
hmm wenn mein "suchstring" mit einem "*" beginnt wird
alles wals wahr angeziegt :-|naja dann werde ich mich nun wohl der macht des "wildcmp"
hingeben wie glob gepostet hat:http://www.codeproject.com/string/wildcmp.asp
tschau
