你将如何设计一个程序来接收一串小写字母并产生颠倒的字符串?
所以如果我输入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"
作为参考,我使用了这个取自维基百科的转换表。上面的解决方案有一点小问题:我无法使它适用于字符(翻转
B
),unicode 值为#\u10412
- 因为它不适合 16 位 unicode 字符,因此无法表示. 我不知道 Racket 不支持编码要求超过 16 位的字符。
首先你的网站必须支持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"标识的文本框中,也就是下方的文本框。
您可以从 Source twiki.org找到有关如何逐步执行此操作的完整列表