如何在不使用toupper函数的情况下将字符转换为大写
How to convert a char to uppercase without using toupper function
最近我看到一段代码将char转换为小写,如果它已经是小写,则保持不变。
char c = 'A';
c |= ' ';
//c -> 'a'
我正在尝试编写一个代码,可以在不使用toupper函数的情况下将字符转换为大写。
目前,我能想到的最简单的方法是下面的代码。
char c = 'a';
c = (c | ' ') - ' ';
//c -> 'A'
所以我想知道是否有一种代码比这更简单,并且可以实现同样的结果。
感谢您的帮助。
第一个代码块的快速解释
Char | ASCII Code
' ' | 13
'A' | 65
'a' | 97
和用于位操作的CCD_ 1运算符
01000001 (char 'A')
Or 00100000 (char ' ')
= 01100001 (char 'a')
----------------------
01100001 (char 'a')
Or 00100000 (char ' ')
= 01100001 (char 'a')
OR
的逆运算是带补码的AND
。
char c = 'a';
c &= ~' ';
演示
说明:
01100001 (char 'a')
AND 11011111 (~ char ' ')
= 01000001 (char 'A')
一种非常直观和半可读的方法是使用字符减法:
在coliru上直播
#include <iostream>
char uppercase(char bla)
{
return bla -('a'-'A');
}
int main()
{
std::cout << uppercase('a') << 'n';
}
请注意,这只适用于a-z
,其余部分需要使用一些if
进行特殊处理。我强烈建议使用std::toupper
或更支持unicode的版本。
没有ASCII的更好方法是
#include <iostream>
using namespace std;
int length(char arr[])
{
int i= 0;
while(arr[i]!=' ')
{
i++;
}
return i;
}
char convertCase(char a)
{
if(a>='a' && a<='z')
{
//isLowerCase
a = 'A' + (a - 'a');
}
else if(a>='A' && a<='Z')
{
//isUpperCase
a = 'a' + (a - 'A');
}
return a;
}
int main()
{
char arr[1000]={ };
cin.getline(arr,990);
int length1 = length(arr);
for(int i =0;i<length1;i++)
{
arr[i] = convertCase(arr[i]);
}
for(int i =0;i<length1;i++)
{
cout<<arr[i];
}
cout<<endl;
}
相关文章:
- 在这种情况下,我真的复制了字节还是复制了字符?
- 在不使用字符串库的情况下输入字符*
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 如何在不将其转换为 ASCII 字符的情况下显示 QByteArray 的十六进制值
- 整数指针与字符指针的情况下悬空指针
- 有没有办法在不使用任何迭代的情况下将字符的字母顺序排列
- 如何在没有wchar_t的情况下在 c++ 中解码/编码 UTF-8 字符
- 给定一个填充无符号字符**的 C 函数,如何在没有中间副本的情况下用数据填充 std::vector
- 为什么在指针和数组的情况下,字符数组的处理方式不同
- 是否可以超载[]运算符在不定义类的情况下访问特定的字符
- 如何在不定义目标变量大小的情况下逐个字符将字符串变量复制到另一个字符
- 如何在不使用循环的情况下将低字节和高字节的字符数组转换为它们的整数数组
- C++ 在不使用 C 字符串库函数的情况下替换数组中的字符
- 我可以在不复制的情况下将 std::vector 重新解释<char>为 std::vector<无符号字符>吗?
- 如何在不删除任何字符的情况下将字符从字符串中的某个位置移动到其最前面
- 在不使用字符串函数的情况下复制C 中的字符数组
- 在没有字符串或字符帮助的情况下查找数字的反面(例如:2500 reverse 0025)
- 有没有办法在不分配变量的情况下将字符串连接到数字
- 在不使用c++中的库函数的情况下,计算不包括null字符的字符串长度
- 在没有ICU或boost的情况下规范化C++中的unicode字符