在 SML NJ 中,我想查找一个字符串是否是另一个字符串的子字符串并找到它的索引。谁能帮我这个?
问问题
1381 次
2 回答
3
该Substring.position
函数是我在基础库中唯一能找到的似乎进行字符串搜索的函数。不幸的是,这个Substring
模块有点难用,所以我写了下面的函数来使用它。只需传递两个字符串,如果未找到,它将返回一个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;
于 2011-12-06T06:00:57.887 回答
0
好吧,您拥有所有子字符串功能,但是如果您还想知道它的位置,那么最简单的方法就是自己进行线性扫描。
基本上,您想分解两个字符串,然后将要查找的子字符串的第一个字符与源字符串的每个字符进行比较,每次失败时都会增加一个位置计数器。当您找到匹配项时,您也会移动到子字符串中的下一个字符,而无需移动位置计数器。如果子字符串是“空的”(当你留下空列表时建模)你已经匹配了它并且你可以返回位置索引,但是如果匹配突然失败你必须返回到你第一次匹配的时候并且跳过一个字母(增加位置计数器)并重新开始。
希望这可以帮助您开始自己做这件事。
于 2011-12-05T23:17:28.613 回答