2013-02-16 406 views
1

您將如何設計一個程序,它將採用一串小寫字母並顛倒產生字符串?顛倒的文字

,所以如果我在home

I型得到ǝɯoɥ倒掛。

我試過在書中尋找開始,但沒有。

+0

你可以多談一點這個用例嗎?這是爲了美學嗎?在哪裏可以看到?在網頁上? – sheriffderek 2013-02-16 18:25:56

+1

相關:http://stackoverflow.com/questions/2995340/how-does-uwop-episdn-text-work – dyoo 2013-02-16 19:08:19

+0

不適用於網站。它的drscheme。我標記了方案和球拍。我猜應該早些說過了。 – 2013-02-16 19:10:01

回答

4

試試這個,有點蠻力方法的完整列表,但工作得很好大寫,小寫字母和數字字符 - 所有其它字符只是提出,因爲他們來:

(define upside-map '#hash(
    (#\a . #\ɐ) (#\b . #\q) (#\c . #\ɔ) (#\d . #\p) (#\e . #\ǝ) (#\f . #\ɟ) 
    (#\g . #\ƃ) (#\h . #\ɥ) (#\i . #\ı) (#\j . #\ɾ) (#\k . #\ʞ) (#\l . #\ן) 
    (#\m . #\ɯ) (#\n . #\u) (#\o . #\o) (#\p . #\d) (#\q . #\b) (#\r . #\ɹ) 
    (#\s . #\s) (#\t . #\ʇ) (#\u . #\n) (#\v . #\ʌ) (#\w . #\ʍ) (#\x . #\x) 
    (#\y . #\ʎ) (#\z . #\z) (#\A . #\∀) (#\B . #\) (#\C . #\Ɔ) (#\D . #\◖) 
    (#\E . #\Ǝ) (#\F . #\Ⅎ) (#\G . #\⅁) (#\H . #\H) (#\I . #\I) (#\J . #\s) 
    (#\K . #\⋊) (#\L . #\˥) (#\M . #\W) (#\N . #\N) (#\O . #\O) (#\P . #\Ԁ) 
    (#\Q . #\Ό) (#\R . #\ᴚ) (#\S . #\S) (#\T . #\⊥) (#\U . #\∩) (#\V . #\Λ) 
    (#\W . #\M) (#\X . #\X) (#\Y . #\⅄) (#\Z . #\Z) (#\0 . #\0) (#\1 . #\Ɩ) 
    (#\2 . #\ᄅ) (#\3 . #\Ɛ) (#\4 . #\ㄣ) (#\5 . #\ϛ) (#\6 . #\9) (#\7 . #\ㄥ) 
    (#\8 . #\8) (#\9 . #\6))) 

(define (flip-string str) 
    (list->string 
    (map (lambda (c) 
      (hash-ref upside-map c (const c))) 
     (reverse (string->list str))))) 

例如:

(flip-string "Hello World") 
=> "pןɹoM oןןǝH" 

作爲參考,我使用了該變換table取自維基百科。上面的解決方案有一點皺紋:我無法設法使它適用於字符(翻轉B),Unicode值爲#\u10412 - 因爲它不適合16位unicode字符,所以它可以「不代表。我不知道Racket不支持需要16位以上編碼的字符。

+0

謝謝奧斯卡獎。它似乎雖然工作。我正在使用列表縮寫的開始學生。也許這就是原因。 – 2013-02-16 23:12:39

+0

@JerryLynch是的,這可能是原因。然後你必須這樣做:在'lambda'(而不是'hash-ref')中創建'cond'併爲每個可能的字符寫一個case。像這樣:'(cond((char =?c#\ a)#\ɐ)...很多條件......(else c))'。這將會訣竅。 – 2013-02-16 23:21:11

+0

@JerryLynch我不認爲這是在這個問題的範圍(似乎也沒有工作,無論是)。無論如何,在Racket中存在將單個字符轉換爲小寫字母的程序'char-downcase',並且它簡單地通過列表中的每個元素調用它。 – 2013-02-16 23:50:27

0

首先您的網站必須支持Unicode,Unicode由數千個字符組成,Unicode的前127個是ASCII。可以通過將字符轉換爲Unicode字符來創建看似顛倒的文本,該字符看起來像是字符的顛倒版本,例如將「6」轉換爲可以使用「9」的翻轉版本「f」是「ɟ」,它是一個Unicode編號爲607(十六進制代碼025F)的拉丁字符。

從技術上講,您需要兩個文本區域框,一個用於原始文本,另一個用於翻轉文本你需要一個Javascript,使用的onkeyup的Javascript鉤子在第一個文本框調用一個upsideDownText()每一個鍵被釋放這樣的時刻發揮作用:

<textarea rows="5" cols="70" id="src" onkeyup="upsideDownText()"></textarea> 

然後做文本處理的upsideDownText()JavaScript函數喜歡 這樣的:

<script type="text/javascript"> 
function upsideDownText() { 
    var srcText = document.getElementById('src').value.toLowerCase(); 
    var out = ''; 
    for(var i = srcText.length - 1; i >= 0; --i) { 
    var ch = srcText.charAt(i); 
    if(ch == 'a') { 
     out += '\u0250' } 
    } else if(ch == 'b') { 
     out += 'q' } 
    } else if(ch == 'c') { 
     out += '\u0254' 
    // etc.... 
    } else { 
     out += ch 
    } 
    } 
    document.getElementById('dest').value = out; 
} 
</script> 

獲得通過ID =「SRC」標識的文本框的內容和轉換的字符串中使用與toLowerCase()方法,以小寫。然後從字符串的末尾逐個字符地循環遍歷字符串。一個大的if-then-else-if塊處理字符轉換。最後將轉換後的字符串推入由id =「dest」標識的文本框中,該文本框是較低的文本框。

,你可以找到如何從源代碼這樣一步一步twiki.org