我需要使用 mips 编写一个程序,该程序将接受一个字符串并将所有大写字母转换为小写字母并将小写字母转换为大写字母。我的直觉是使用字母数值编写 if 语句,但我想知道是否有更好的方法来解决这个问题。
问问题
789 次
1 回答
0
是的,肯定有更好的方法来做到这一点!对应的大小写字母字符的 ASCII 值都完全不同0x20
。例如,'A' = 0x41
和'a' = 0x61
。基本上,第六位设置为小写字符,清除为大写字符。
最简单的实现使用了一个bit-bashing技巧——如果你能识别出一个字符是一个字母,你可以使用大写它:
ch &= ~0x20;
或使用以下方式将其小写:
ch |= 0x20;
请记住,这不适用于字母 ASCII 字符以外的任何内容。您可以检查一个字符是否与类似(ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')
.
另一种if
完全避免的方法是构建一个包含 256 个条目的表,其中包含每个字符的预期输出,并为每个字符建立索引。根据您的处理器,它可能会稍微高效一些,但代价是写出(或生成)更烦人。
于 2013-10-07T03:26:30.560 回答