大写转换的不同方法

xiaoxiao2021-02-28  114

方法一:自定义函数

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++; } }
转载请注明原文地址: https://www.6miu.com/read-71922.html

最新回复(0)