1

我需要定义“字符串正确”的程序

(define string-right
  (lambda (x)
    (substring x (quotient (string-length x) 2) (string-length x))))

不适用于奇数字符串长度,但程序

(define string-right
    (lambda (x)
      (substring x (+ (quotient (string-length x) 2) 1)(string-length x))))

不适用于偶数字符串长度。请帮忙。沮丧的。

4

2 回答 2

1

假设你的意思是你想要一个没有中间的字符串的右半部分:
在商(第一个选项)中,替换:

(string-length x)

和:

(+ 1 (string-length x))

如果字符串的长度是偶数,则 floor((length + 1) / 2) = length / 2

否则地板((长度+ 1)/ 2)=(长度+ 1)/ 2

+ 1部分将排除中间元素

完整的解决方案:

(define string-right
  (lambda (x)
    (substring x (quotient (+ 1 (string-length x)) 2) (string-length x))))
于 2012-09-13T23:37:31.047 回答
0

试试这个方法:

(define string-right
  (lambda (x)
    (substring x (floor (/ (string-length x) 2)))))

如果字符串长度为奇数,上述过程将包括中间的字符。如果您不希望这样,请替换floor为,ceiling并且返回的字符串中不会出现中间字符。

一些使用示例floor

(string-right "")      ; => ""
(string-right "a")     ; => "a"
(string-right "ab")    ; => "b"
(string-right "abc")   ; => "bc"
(string-right "abcd")  ; => "cd"
(string-right "abcde") ; => "cde"

一些使用示例ceiling

(string-right "")      ; => ""
(string-right "a")     ; => ""
(string-right "ab")    ; => "b"
(string-right "abc")   ; => "c"
(string-right "abcd")  ; => "cd"
(string-right "abcde") ; => "de"
于 2012-09-13T23:46:07.250 回答