C ++,最有效的方法是将大写更改为小写,反之亦然,无条件分支

时间:2017-02-15 09:29:17

标签: c++ ascii

输入时我们有单个字符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。

2 个答案:

答案 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设置数组,则可移植。