1

你将如何设计一个程序来接收一串小写字母并产生颠倒的字符串?

所以如果我输入home

ǝɯoɥ倒过来了。

我已经尝试在书中寻找入门,但没有。

4

2 回答 2

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"

作为参考,我使用了这个取自维基百科的转换表。上面的解决方案有一点小问题:我无法使它适用于字符(翻转B),unicode 值为#\u10412- 因为它不适合 16 位 unicode 字符,因此无法表示. 我不知道 Racket 不支持编码要求超过 16 位的字符。

于 2013-02-16T21:39:05.820 回答
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"标识的文本框中,也就是下方的文本框。

您可以从 Source twiki.org找到有关如何逐步执行此操作的完整列表

于 2013-02-16T19:06:51.320 回答