2013-02-16 4 views
1

Как бы вы разработали программу, которая будет принимать строку строчных букв и создать строку вверх ногами?Перевернутый текст

так, если я печатаю в home

я получить ǝɯoɥ с ног на голову.

Я пробовал искать в книге, чтобы начать, но ничего.

+0

Можете ли вы рассказать немного больше об этом случае? Это для эстетики? Где это будет видно? На веб-странице? – sheriffderek

+1

Связано с: http://stackoverflow.com/questions/2995340/how-does-uwop-episdn-text-work – dyoo

+0

не для веб-сайта. его для drscheme. Я отметил схему и ракетку. думаю, я должен был сказать это раньше. –

ответ

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 снято из Wikipedia. Вышеупомянутое решение имеет немного морщин: мне не удалось заставить его работать для символа (перевернуто B), с unicode значением #\u10412 - потому что он не поместится в 16-разрядный символ юникода, t быть представленным. Я не знал, что Racket не поддерживает символы с кодировкой, требующей более 16 бит.

+0

Спасибо Оскар. Однако, похоже, он не работает. Я использую Beginning Student со списком сокращений. Возможно, причина. –

+0

@JerryLynch да, это, наверное, причина.Тогда вам придется это сделать: создайте 'cond' в' lambda' (вместо 'hash-ref') и напишите случай для каждого возможного символа. Например: '(cond ((char =? C# \ a) # \ ɐ) ... множество условий ... (иначе c))'. Это будет трюк. –

+0

@JerryLynch Я не думаю, что это в рамках этого вопроса (и, похоже, тоже не работает). Во всяком случае, в Racket существует процедура 'char-downcase', которая преобразует один символ в нижний регистр, и это простое обращение к каждому элементу списка. –

0

Прежде всего, ваш сайт должен поддерживать Unicode, Unicode состоит из тысяч символов, первые 127 из Unicode - 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> 

получить содержимое текстового окна, идентифицированной идентификатором = «SRC» и преобразовать строку в нижний регистр с помощью метода toLowerCase(). Затем пропустите строку, символ по символу, начиная с конца строки. Большой блок if-then-else-if обрабатывает преобразование символов. наконец, вставьте преобразованную строку в текстовое поле, идентифицированное id = "dest", которое является нижним текстовым полем.

вы можете найти полный список того, как делать этот шаг за шагом от источника twiki.org

Смежные вопросы