输入时我们有单个字符Chr
。如果Chr
为大写,则输出必须为Chr
的小写,反之亦然。
使用if else
语句的简单实现:
if(Chr>='a' && Chr<='z') cout<<(unsigned char)(a-32);
else cout<<(unsigned char)(a+32);
你可以在没有任何条件分支的情况下提出解决方案吗?
像Chr + 32*(<sign of>(Chr - 'a'))
?
更新:当被问到这个问题时,我记住了ASCII。
答案 0 :(得分:9)
如果您的角色使用的是ASCII字符集,您可以使用值32进行xor在大写和小写之间翻转。
char switchCase(char letter)
{
return letter ^ 32;
}
答案 1 :(得分:4)
您可能会发现很难超越::tolower
,因为它会针对您的平台进行高度优化。
但如果您想自己手动编码,那么维护一个大小为256的数组arr
(基于unsigned char
),以便
arr[n]
是n
的小写形式。
没有分支的O(1),如果您使用'a'
,'b'
和&amp; c设置数组,则可移植。