Wpis z mikrobloga

Dzisiaj trochę ambitniejsze zadanie od Facebooka.

Zaimplementuj wyrażenia regularne z następującymi specjalnymi znakami:
. (kropka) dopasowuje dowolny pojedynczy znak
x* (gwiazdka) dopasowuje zero lub więcej znaków x

Tj. zaimplementuj funkcję, która przyjmuje dwa argumenty: napis s oraz poprawne wyrażenie regularne r i zwraca prawdę wtedy i tylko wtedy, kiedy wyrażenie r całkowicie dopasowuje się do s.

np. dla s="Mirek" i r="M.rek" -> true
s="Mirek" i r=".*" -> true
s="Mirek" i r="Mirabella" -> false

#dailycodingproblem #programowanie
  • 28
  • Odpowiedz
@NotABigFan: kurcze wstyd. Program działa w taki sposób, że mam dwa wskaźniki, jeden na s, drugi n r. Lecę po każdym znaku z s i porównuję z r. Jeśli napotkam . to wiadomo, iteruję dalej, jeśli natomiast znajdę w r * to lecę wkolejnej pętli porównując kolejne znaki z s ze znakiem r(wskaznikR - 1) aż do końca patternu. Jeśli dojdę do końca s, to uważam, że pattern r pasuje
  • Odpowiedz
@NotABigFan: nie rozumiem też dlaczego ten pattern, który pokazałeś, że działa u mnie źle powinien działać dobrze. Wiem, że powinno być true bo sprawdziłem w prawdziwym regexie, ale nie rozumiem dlaczego, skoro jest w patternie ka*, a w source nie ma ciągu 'ka'.
  • Odpowiedz
@passage: gwiazdka oznacza zero lub więcej elementów. Czyli jak masz w patternie 'ka*' to w tekście może nie być w ogóle a, tj. może zostać pominięte. Pojedynczy wskaźnik na pewno nie da dobrej odpowiedzi bo w momencie w którym natrafiasz na gwiazdkę czasem dobrze jest ją pominąć w ogóle a czasem ta gwiazdka może oznaczać dwa znaki a czasem więcej.

  • Odpowiedz