我们Chr在输入上有单个字符.输出必须小写,Chr如果Chr是大写,反之亦然.
使用if else声明的琐碎实现:
if(Chr>='a' && Chr<='z') cout<<(unsigned char)(a-32);
else cout<<(unsigned char)(a+32);
Run Code Online (Sandbox Code Playgroud)
你能提出没有任何条件分支的解决方案吗?
有点像Chr + 32*(<sign of>(Chr - 'a'))?
更新:当被问到这个问题时,我记住了ASCII.
如果您的字符使用的是ASCII字符集,则可以使用值32进行xor在大写和小写之间翻转.
char switchCase(char letter)
{
return letter ^ 32;
}
Run Code Online (Sandbox Code Playgroud)
您可能会发现它很难被击败,::tolower因为它将针对您的平台进行高度优化。
但如果您想自己手动编码,则维护一个arr大小为 256 的数组(基于unsigned char),这样
arr[n]是 的小写形式n。
这是 O(1),没有分支,并且如果您使用'a', 'b', &c 设置数组,那么它将是可移植的。
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |