640.webp
    方法一,ASCII码加减转换。观察到大写字母和小写字母的ASCII码相差32,大写字母+32就是小写字母。

    1. #include <cstdio>
    2. int main() {
    3. char str[1024];
    4. scanf_s("%s", str, 1024);
    5. for (char* p = str; *p; ++p) {
    6. if (*p >= 'A' && *p <= 'Z') {
    7. *p += 32;
    8. }
    9. }
    10. printf("%s\n", str);
    11. return 0;
    12. }

    方法二,比特置1。观察到大写字母的ASCII码的第5比特为0,小写字母第5比特是1,所以大写字母将第5比特置1就是小写字母。置1操作可以用按位或来进行。按位或0x20,或者写成十进制的32均可。

    1. #include <cstdio>
    2. int main() {
    3. char str[1024];
    4. scanf_s("%s", str, 1024);
    5. for (char* p = str; *p; ++p) {
    6. if (*p >= 'A' && *p <= 'Z') {
    7. *p |= 0x20;
    8. }
    9. }
    10. printf("%s\n", str);
    11. return 0;
    12. }

    方法三,用函数。实际工程中遇到这种比较通用的问题,还是应该用已有的函数。这里大写转小写可以用tolower()函数,定义在中。

    1. #include <cstdio>
    2. #include <string>
    3. #include <iostream>
    4. #include <cctype>
    5. #include <algorithm>
    6. using namespace std;
    7. int main() {
    8. string a ="AAAbbb";
    9. transform(a.begin(), a.end(), a.begin(), ::tolower);
    10. cout << a << endl;
    11. return 0;
    12. }