2012-09-13 28 views
1

我需要定義「字符串權」 程序奇數串如何在方案中定義字符串右鍵?

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

不工作長度 但prcoedure甚至上字符串長度

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

不工作。請幫忙。沮喪。

+0

你所期望的要返回:'(字符串右 「富酒吧巴茲」)'? –

回答

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)))) 
+0

REPL在使用樓層和天花板時都返回了錯誤。任何其他想法? –

+0

我的答案的'floor'部分只是一個解釋,而不是代碼的一部分。 – user1651640

+0

哈哈哦,好吧,我明白了,那完全解決了。謝謝! =) –

0

嘗試這種方法:

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

如果字符串長度是奇數,上面的過程將包括中間的字符。如果你不想要,用ceiling替換floor,並且中間的字符不會出現在返回的字符串中。

使用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" 
相關問題