Wyszukanie ciągu znaków w pliku

0

Czy istniej sposób szybszy niż bajt po bajcie przeszukiwania tablicy by znaleźć określony string? Jeśli tak to jaki i proszę o krótki opis, bo c++ dopiero się uczę.

0
#include <stdio.h>

char* mystrstr(char* haystack,char* needle){
  while(*haystack){                              // tu moze byc 1/TRUE, wtedy wyjscie nastapi poprzez warunek if(!*haystack)
    char* s=needle;
    while(*s!=*haystack && *haystack)haystack++; // dopoki pierwszy znak szukanego ciagu jest rozny od kolejnych znakow w haystack
    if(!*haystack)return 0;                      // w calym ciagu nie znalazl sie ani razu pierwszy znak poszukiwanego podciagu.
    char* p=haystack;                            // zapamietaj pozycje
    do{                                          // sprawdz czy cale needle miesci sie w haystack
      haystack++;                                // pierwszego znaku nie trzeba sprawdzac, wiadomo, sa rowne
      s++;
    }while(*s==*haystack && *s && *haystack);
    if(!*s)return p;                             // wszystkie znaki byly jednakowe az do konca, niestety trzeba sprawdzic ponownie wartosc *s
    haystack=++p;                                // powrot do zapamietanej pozycji+1
  }
  return 0;                                      // jesli w warunku petli nie ma 1/TRUE
}

int main(){
  char* base="Ala ma kota , psa i goryla 1112";
  char* search[]={"ma","kota"," ","Ala","dupa","goryla_","la","11","12",0};
  char** d=search;
  while(*d){
    char* q=mystrstr(base,*d);
    if(q)printf("%s\n",q);
      else printf("nie znaleziono ciagu: %s\n",*d);
    d++;
  }
  return 0;
}

Chodzi o to zeby przejsc przez ciag w ktorym szukamy bylo jak najmniej, zeby jak najmniej cofac sie do zapamietanej pozycji.

Mozna jeszcze ewentualnie sprawdzac w petli 'while(*s==*haystack && *s && *haystack){' czy *haystack!=*p i odpowiednio zapamietywac pozycje, aby potem nie przypisywac haystack ++p tylko ponowne wystapienie pierwszego znaku z szukanego ciagu, ale doda to tylko jeden warunek do sprawdzenia wiecej w petli ktora porownuje znaki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1