String OCAML-字符串和子字符串

String OCAML-字符串和子字符串,string,ocaml,substring,String,Ocaml,Substring,有人能帮我写一个函数来检查一个字符串是否是另一个字符串的子字符串吗 (最多只能有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 ->

有人能帮我写一个函数来检查一个字符串是否是另一个字符串的子字符串吗

(最多只能有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所说的检查:


使用
字符串
模块:

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所说的检查:


有了电池,你可以使用。它也存在于ExtLib:.

中,您可以使用电池。它也存在于ExtLib:.

中,这是一种基于
字符串的替代方案,可能具有更好的性能和更低的内存使用率:

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
let is_子字符串字符串子字符串=
将ssl=String.length子字符串和sl=String.length字符串放入
如果ssl=0 | | ssl>sl,则为false,否则为false
让max=sl-ssl和clone=String.create-ssl在
让rec检查位置=
pos错误

A
字符串
替代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
let is_子字符串字符串子字符串=
将ssl=String.length子字符串和sl=String.length字符串放入
如果ssl=0 | | ssl>sl,则为false,否则为false
让max=sl-ssl和clone=String.create-ssl在
让rec检查位置=
pos错误

您所说的“最多只能有两个字符串”是什么意思?关于字符串/子字符串测试,请参见。要向我们展示您的尝试,以便我们能够更有效地帮助您吗?帮助我们帮助您。您所说的“最多只能有两条字符串”是什么意思?关于字符串/子字符串测试,请参见。要向我们展示您的尝试,以便我们能够更有效地帮助您吗?帮助我们帮助您。基于
字符串的
的内存使用非常可怕!是的,但是我认为对于一个新的OCaml用户来说,代码应该很容易理解:-)基于
字符串的
的内存使用非常可怕!是的,但是我认为对于一个新的OCaml用户来说,代码应该很容易理解:-)问题是关于OCaml而不是java的问题是关于OCaml而不是java的