在这里,我试图找到' - '的索引。其次是'}'在一个字符串中。
对于像sustringIndex "abcd -} sad"
这样的输入,它为我提供了10
的输出
这给了我整个字符串长度。
如果我执行sustringIndex "abcd\n -} sad"
之类的操作,它会给我6
为什么这样做\ n。我究竟做错了什么。请纠正我,我是一个菜鸟。
substrIndex :: String -> Int
substrIndex ""=0
substrIndex (s:"") = 0
substrIndex (s:t:str)
| s== '-' && t == '}' = 0
| otherwise = 2+(substrIndex str)
答案 0 :(得分:4)
您的程序有错误。你正在检查每两个字符。但是,如果-
和}
位于不同的对中,例如S-}
会怎样?
首先检查S
和-
分别等于-
和}
。
由于它们不匹配,它将继续单独使用}
。
所以,你只需稍微改变一下逻辑,比如
substrIndex (s:t:str)
| s == '-' && t == '}' = 0
| otherwise = 1 + (substrIndex (t:str))
现在,如果当前对与-}
不匹配,则只需跳过第一个字符并继续第二个字符substrIndex (t:str)
。因此,如果S-
不匹配,您的程序将继续-}
。由于我们只删除了一个字符,因此我们只添加了1
,而不是2
。
这可以缩短并书写清楚,如user2407038所建议的那样,
substrIndex :: String -> Int
substrIndex [] = 0
substrIndex ('-':'}':_) = 0
substrIndex (_:xs) = 1 + substrIndex xs