Czy ktoś może mi pomóc w kodowaniu efektywnego sprawdzania podłańcucha w OCaml? Biorąc pod uwagę dwa ciągi, sprawdź, czy pierwszy zawiera drugi?Sprawdzanie podłańcucha w Ocaml
Korzystając z modułu , możemy to zrobić?
Czy ktoś może mi pomóc w kodowaniu efektywnego sprawdzania podłańcucha w OCaml? Biorąc pod uwagę dwa ciągi, sprawdź, czy pierwszy zawiera drugi?Sprawdzanie podłańcucha w Ocaml
Korzystając z modułu , możemy to zrobić?
Coś jak to może działać:
let contains s1 s2 =
let re = Str.regexp_string s2
in
try ignore (Str.search_forward re s1 0); true
with Not_found -> false
Oto niektóre testy funkcji:
# contains "abcde" "bc";;
- : bool = true
# contains "abcde" "bd";;
- : bool = false
# contains "abcde" "b.";;
- : bool = false
# contains "ab.de" "b.";;
- : bool = true
let contains_substring search target =
String.substr_index search target <> None
wymaga Core, prawda? – unhammer
to przyzwyczajenie praca, jeśli 's2' ma szczególny charakter regex sekwencje w nim, takie jak '.'. Najpierw musisz zadzwonić, "Str.quote s2". – nlucaroni
Nie sądzę, że to prawda. Celem 'regexp_string' jest dopasowanie dokładnie określonego ciągu znaków. Prawdopodobnie cytuje wewnętrznie. Moje testy pokazują, że ten kod działa poprawnie. –
zawiera jest złą nazwą, ponieważ ma już inne znaczenie w bibliotekach rozszerzeń. – ygrek