如何提取未知长度字符串的最后一个字符?

时间:2016-05-28 22:22:42

标签: scheme racket

我正在编写一个函数,它将stringA和stringB作为参数,并将stringB的第一个字符与StringA的最后一个字符进行比较。如果它们相等,则函数返回true,否则返回false

我几乎已经准备好了整个函数,但我无法找到一种方法来获取stringA的最后一个字符,因为它的长度未知。我检查了文档,但我一无所获。有什么建议吗?

  (cond
    [(string=? (substring stringA ???) (substring stringB 0 2))"True"]
    [else "False"])

4 个答案:

答案 0 :(得分:3)

您可以使用deque(或者更少一个)来获取字符串的最后一个字符位置:

string-length

请注意,字符与长度为1 字符串不同。因此,提取字符的正确方法是使用(string-ref str (sub1 (string-length str))) 等,而不是string-ref

答案 1 :(得分:2)

Chris似乎回答了你的问题。只是提醒一下,要使用string-ref,它返回一个字符,你应该使用比较函数char =? (或等于?)。

我想添加另一个我发现更详细的解决方案,但需要从行星球拍下载(安装包集合后)。使用集合包,您可以使用与任何集合相同的函数,而不仅仅是字符串,使用模块的(last ..)和(first ..)函数。

(require data/collection)

(let ([stringA "abcd"]
      [stringB "dcba"])
  (cond
    [(equal? (last stringA)
             (first stringB)) "True"]
    [else "False"]))

答案 2 :(得分:0)

您还可以使用SRFI-13函数string-take-right,它将参数字符串的最后n个字符作为字符串返回。

答案 3 :(得分:-1)

每种语言都有字符串的长度函数。在Racket中我发现了这个:

https://docs.racket-lang.org/reference/strings.html#%28def.%28%28quote.~23~25kernel%29._string-length%29%29

有这样的:字符串长度str

所以只要运行它会给你长度,然后你可以提取最后一个字符