Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[c++] funkcja szukajaca ciagu znakow

kozak_sc 15 Sie 2008 22:53 1838 3
  • #1 15 Sie 2008 22:53
    kozak_sc
    Poziom 23  

    Cześć
    Napisałem funkcję szukającą ciagu znaków w innym ciągu znaków i mam problem bo czasem działa a czasem nie. Przeglądałem to kilka razy ale nie mogę znaleźć błędu może ktoś pomoże ??

    Code:
    bool FindInBuffer(char *DestBuffer,int BufferLenght,char *FindString,int StringLenght)
    
    {
     int DestPointer=0,FindPointer=0;

     for(FindPointer=0;DestPointer<BufferLenght;DestPointer++)
     {
      if(DestBuffer[DestPointer]==FindString[FindPointer])
       {   
          for(FindPointer=0;FindPointer<StringLenght;FindPointer++)
          {
           if(DestBuffer[DestPointer+FindPointer]!=FindString[FindPointer]) break;
          }
            if (FindPointer==(StringLenght-1)) return 1;
      }                                                                           
     }
      return 0;
    }

    0 3
  • #2 15 Sie 2008 23:05
    MasterBM++
    Poziom 10  

    proponuję przyjrzeć się rozwiązaniom wzorcowym i napisać dokładnie tak jak tam.
    wpisujesz w www.google.pl 'find substring ansi'
    i szukasz
    rezultat:
    http://www.java2s.com/Code/C/String/Findsubstringourownfunction.htm

    a jeszcze lepsze rozwiązanie, to standardowa funkcja strstr (z bibliotek standardowych "string.h")
    jej iteratory są ponad 10 razy szybsze od petli for(...;...;...)
    i tak właśnie rozwiązałbym ten problem :)

    przykład: http://www.java2s.com/Code/C/String/Findsubstring.htm

    0
  • #3 15 Sie 2008 23:56
    Dr.Vee
    VIP Zasłużony dla elektroda

    Witam,

    Oczywiście zgadzam się z MasterBM++ - nie ma sensu przepisywać od nowa standardowych funkcji bibliotecznych.

    Jeśli jednak się już to robi (w celach dydaktycznych), to trzeba do sprawy podejść na serio - skoro raz działa, a raz nie, to przy jakich argumentach działa, a przy jakich nie? Jeśli nie umiesz znaleźć błędu w takiej prostej funkcji, to jak znajdziesz błąd w skomplikowanym programie??

    Czy StringLength i BufferLength to ilość znaków, czy długość tablicy (wraz z końcowym '\0')? Czemu masz StringLength-1? Jak zadziała funkcja, gdy StringLength == 0? A co się stanie, jeśli DestPointer+FindPointer >= BufferLength?

    Podsumowując, masz jeszcze dużo do przemyślenia i poprawienia :)

    Pozdrawiam,
    Dr.Vee

    0
  • #4 16 Sie 2008 14:42
    x3r
    Poziom 17  

    To co chcesz zrobić realizuje się poprzez wymyślone już wydajne algorytmy. Najlepiej więc będzie jak postarasz się jakiś z nich zaimplementować. Do wyboru masz m.in:

    :arrow: Algorytm Knutha-Morrisa-Pratta
    :arrow: Algorytm Boyer-Moore'a
    :arrow: Algorytm Galila Seiferasa
    :arrow: Karpa-Rabina

    pozdrawiam

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo