Может ли кто-нибудь помочь мне написать функцию, которая проверяет, является ли строка подстрокой другой строки?OCAML - строки и подстроки
(может быть больше, чем только 2 строки)
Благодаря
Может ли кто-нибудь помочь мне написать функцию, которая проверяет, является ли строка подстрокой другой строки?OCAML - строки и подстроки
(может быть больше, чем только 2 строки)
Благодаря
С String
модуля:
let contains s1 s2 =
try
let len = String.length s2 in
for i = 0 to String.length s1 - len do
if String.sub s1 i len = s2 then raise Exit
done;
false
with Exit -> true
С Str
модулем, как @barti_ddu сказал проверить this topic:
let contains s1 s2 =
let re = Str.regexp_string s2 in
try
ignore (Str.search_forward re s1 0);
true
with Not_found -> false
Использование памяти для 'String' - это страшно! –
Да, но я думал, что код будет достаточно прост для понимания для нового пользователя OCaml :-) – cago
С батареями вы можете использовать String.exists. Он также существует в ExtLib: String.exists.
String
основанной Альтернативы ответа cago, что может иметь более высокую производительность и более низкое использование памяти:
let is_substring string substring =
let ssl = String.length substring and sl = String.length string in
if ssl = 0 || ssl > sl then false else
let max = sl - ssl and clone = String.create ssl in
let rec check pos =
pos <= max && (
String.blit string pos clone 0 ssl ; clone = substring
|| check (String.index_from string (succ pos) substring.[0])
)
in
try check (String.index string substring.[0])
with Not_found -> false
String str="hello world";
System.out.println(str.contains("world"));//true
System.out.println(str.contains("world1"));//false
вопрос был о ocaml не java – mou
Что вы имеете в виду под "может быть больше, чем только 2 строкой? Что касается тестов с строкой/подстрокой, см. Http://stackoverflow.com/q/8373460/520394. –
Хотите показать нам свои попытки, чтобы мы могли помочь вам более эффективно? Помогите нам помочь вам. – Tim