Как бы вы разработали программу, которая будет принимать строку строчных букв и создать строку вверх ногами?Перевернутый текст
так, если я печатаю в home
я получить ǝɯoɥ
с ног на голову.
Я пробовал искать в книге, чтобы начать, но ничего.
Как бы вы разработали программу, которая будет принимать строку строчных букв и создать строку вверх ногами?Перевернутый текст
так, если я печатаю в home
я получить ǝɯoɥ
с ног на голову.
Я пробовал искать в книге, чтобы начать, но ничего.
Попробуйте это, немного грубой силы подход, но работает достаточно хорошо для прописных, строчных и количество символов - все остальные символы представлены так же, как они приходят:
(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 бит.
Спасибо Оскар. Однако, похоже, он не работает. Я использую Beginning Student со списком сокращений. Возможно, причина. –
@JerryLynch да, это, наверное, причина.Тогда вам придется это сделать: создайте 'cond' в' lambda' (вместо 'hash-ref') и напишите случай для каждого возможного символа. Например: '(cond ((char =? C# \ a) # \ ɐ) ... множество условий ... (иначе c))'. Это будет трюк. –
@JerryLynch Я не думаю, что это в рамках этого вопроса (и, похоже, тоже не работает). Во всяком случае, в Racket существует процедура 'char-downcase', которая преобразует один символ в нижний регистр, и это простое обращение к каждому элементу списка. –
Прежде всего, ваш сайт должен поддерживать 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
Можете ли вы рассказать немного больше об этом случае? Это для эстетики? Где это будет видно? На веб-странице? – sheriffderek
Связано с: http://stackoverflow.com/questions/2995340/how-does-uwop-episdn-text-work – dyoo
не для веб-сайта. его для drscheme. Я отметил схему и ракетку. думаю, я должен был сказать это раньше. –