字符串与Haskell中的换行符匹配

时间:2015-03-23 07:06:20

标签: string haskell

在这里,我试图找到' - '的索引。其次是'}'在一个字符串中。

对于像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)

1 个答案:

答案 0 :(得分:4)

您的程序有错误。你正在检查每两个字符。但是,如果-}位于不同的对中,例如S-}会怎样?

  1. 首先检查S-分别等于-}

  2. 由于它们不匹配,它将继续单独使用}

  3. 所以,你只需稍微改变一下逻辑,比如

    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