C ,最有效的方法将大写速度更改为小写,反之亦然,而无需条件分支
C++, most efficient way to change uppercase to lowercase and vice versa without condition branching
我们在输入上有单个字符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。
相关文章:
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- IPC使用多个管道和分支进程来运行Python程序
- 如何删除peer if else分支中的冗长句子
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 如何正确地将分支添加到已存在的树中
- 在C++中,将int值赋给enum,反之亦然
- 如何将分支添加到已存在的TTree:ROOT
- 如何删除 LLVM 中的不规则分支?
- 如何在 c++ 中将所有大写字母转换为字符串中的小写字母,反之亦然?
- 将通用引用强制转换为可调用的 void 指针,反之亦然
- 用非原子更新原子变量,反之亦然
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 如果以下行不包含决策或分支,GDB 无法单步跳过函数
- 函数指针与条件分支
- 分支未在 Linux 上采用
- 如何删除分支因子不一致的树,最大为 30,40
- std::shared_ptr vs std::make_shared:意外的缓存未命中和分支预测
- 更改 git 分支名称后,在项目的 Visual Studio 代码中丢失智能感知(建议,转到定义C++
- 将基类分配给派生对象,反之亦然,以C++以及静态和动态对象之间的差异
- C ,最有效的方法将大写速度更改为小写,反之亦然,而无需条件分支