方法一:自定义函数
char Toupper(char c)
{
if('a' <= c && c <= 'z')
c = c + 'A' - 'a';
return c;
}
std::string str = "hello world1";
transform(str.begin(), str.end(),str.begin(), ::tolower);
方法二:仿函数
// 仿函数
struct convert {
void operator()( char& c) { c = toupper((unsigned char)c); }
};
for_each(str.begin(),str.end(),convert());
方法三:全字符转换
/*
a 0110 0001
A 0100 0001
只有第6位是不一样的,所以,如果想把小写转换成大写,只需要将第6位改成0,也就是-32。这样直接和
1101 1111
进行与操作,这样就保证了其他位不变,将第6位变成了0
同样,如果要将大写转换成小写,需要将第6为改为1。
直接和
0010 0000
进行或运算,就可以完成。
还有一个比较更简单的是直接和
0010 0000
进行异或运算
*/
void ToUpper_1(char* s)
{
char* p = s;
while(*s !='\0')
{
std::cout<< *s;
if(*s >= 'a' && *s <= 'z')
*s &= 0xDF; // 11011111B
s++;
}
}