2017-02-15 193 views

回答

9

如果您的角色正在使用ASCII字符集,您可以与值32异或以在大写和小写之间翻转。

char switchCase(char letter) 
{ 
    return letter^32; 
} 
+0

在ASCII中的确可以,而且是一个聪明的做法。 (如果你提到这个限制,我认为这会得到很多upvotes。) – Bathsheba

+0

这只适用于如果输入是字母字符,但不是标点符号,数字等。但如果确实如此,那么它很好。 – mars

+2

A(41):0100,0001 vs a(61):0110,0001。所以位5(32)是开关。 ASCII很漂亮。 –

4

您可能会发现很难击败::tolower,因为它将会针对您的平台进行高度优化。

但是,如果你想自己handcode,然后保持大小256(一个基于unsigned char左右)的阵列arr这样

arr[n]n小写形式。

这就是没有分支的O(1),并且如果您使用'a','b',来设置阵列,它将是便携式的。

+1

事实上,基于分支和数组的操作都是O(1),尽管取决于编译器优化,放置代码(循环?)和缓存状态,阵列解决方案可能由于缓存故障而稍慢,而分支可以被优化,例如使用分支预测。正如通常所建议的那样,测试所有解决方案并对它们进行分析以查看哪一个最适合您。 – cbuchart

+2

@cbuchart:绝对!这就是为什么我的第一句话可能会赢得它。 – Bathsheba

相关问题