2011-12-05 8 views

答えて

0

すべての部分文字列関数がありますが、その位置も知りたい場合は、リニアスキャンで自分で行うのが最も簡単です。

基本的には、両方の文字列を爆発させ、見つけたい部分文字列の最初の文字と、ソース文字列の各文字を比較し、失敗するたびに位置カウンタをインクリメントします。一致するものが見つかると、位置カウンタを動かすことなく、部分文字列の次の文字に移動します。部分文字列が "空"(空リストを残してモデル化されている)の場合、それはすべて一致していて位置インデックスを返すことができますが、突然一致しなければ最初の一致があったときに戻る必要があります。手紙を飛ばす(ポジションカウンターをインクリメントする)、もう一度やり直してください。

希望すれば、これを自分でやることができます。

3

文字列検索を行うと思われる基底ライブラリでは、Substring.positionという関数しか見つかりません。残念ながら、Substringモジュールは使いにくいので、次の関数を使って書きました。ただ、2つの文字列を渡し、それがoption返します。それが発見された場合に見つからない場合NONEを、またはインデックスのSOME

fun index (str, substr) = let 
    val (pref, suff) = Substring.position substr (Substring.full str) 
    val (s, i, n) = Substring.base suff 
in 
    if i = size str then 
    NONE 
    else 
    SOME i 
end; 
関連する問題