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

C++, most efficient way to change uppercase to lowercase and vice versa without condition branching

本文关键字:反之亦然 分支 条件 速度 有效 方法      更新时间:2023-10-16

我们在输入上有单个字符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'))

update :当被问到这个问题时,我会牢记ASCII。

如果您的字符使用ASCII字符集,则可以用32的值进行XOR,以在上部和下情况之间翻转。

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

您可能会发现很难击败::tolower,因为这将被高度优化到您的平台。

但是,如果您想自己手工编码,请保持一个256尺寸的数组arr(基于unsigned char),以便

arr[n]n的较低情况。

那是没有分支的O(1),如果您使用 'a''b',&amp; c。

将数组设置为可移植