1

'string-right'プロシージャを定義する必要があります

(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

それ以外の場合、floor((length + 1)/ 2)=(length + 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)))))

上記の手順では、文字列の長さが奇数の場合、中央に文字が含まれます。それを望まない場合は、に置き換えてください。そうすればfloorceiling返される文字列に真ん中の文字が含まれなくなります。

を使用したいくつかの例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 に答える