回文C程序大写字母转小写字母

Palindrome C program convert capital letters to small letters

我在学校正在研究回文 C 程序。我快完成了,但我希望我的程序将 'Anna' 和 'anna' 都标记为回文。我尝试了一些东西,但没有任何效果。 我的代码:

#include <stdio.h>
#include <string.h>

int main() {
    char palindroom[50],a;
    int lengte, i;
    int woord = 0;

    printf("This program checks if your word is a palindrome.\n");
    printf("Enter your word:\t");
    scanf("%s", palindroom);

    lengte = strlen(palindroom);

    for (i = 0; i < lengte; i++) {
        if (palindroom[i] != palindroom[lengte - i - 1]) {
            woord = 1;
            break;
        }
    }

    if (woord) {
        printf("Unfortunately, %s is not palindrome\n\n", palindroom);
    }
    else {
            printf("%s is a palindrome!\n\n", palindroom);
    }
    getchar();
    return 0;
}

我看到有些人使用 ctype.h 的 tolower,但我想避免这种情况。

所以我的问题是:如何将字符串中的所有大写字母转换为小写字母?

[ps。我可能编码的一些词可能看起来很奇怪,但那是荷兰语。擦掉一个o你就明白了]

谢谢。

如果您不想使用 tolowertoupper,您可以这样做:

// tolower
char c = 'U';
char lower_u = c | 0x20

// toupper
char c = 'u';
char upper_u = c & 0xdf

在 ASCII 中,低位字符和高位字符之间的区别是第 5 位。 当第 5 位为 0 时,取高位字符,当第 5 位为 1 时,取低位字符。

ASCII table 中大写和小写之间的区别是 32,因此如果输入中的大写字母将其转换为小写 (http://www.asciitable.com/),您可以添加 32 :

if ((currentletter > 64) && (currentletter < 91))
    {
        char newletter;
        newletter = currentletter + 32;
        str[i] = newletter;
    }
    else
    {
        str[i] = currentletter;
    }

修改程序:

#include <stdio.h>
#include <string.h>

int main() {
    char palindroom[50],a;
    int lengte, i;
    int woord = 0;

    printf("This program checks if your word is a palindrome.\n");
    printf("Enter your word:\t");
    scanf("%s", palindroom);

    lengte = strlen(palindroom);

    for (i = 0; i < lengte; i++) 
        {
             if (palindroom[i] > 64 && palindroom[i] < 91)
                    { 
                      palindroom[i] = palindroom[i] + 32;
                    }         

        if (palindroom[i] != palindroom[lengte - i - 1]) {
            woord = 1;
            break;
        }
    }

    if (woord) {
        printf("Unfortunately, %s is not palindrome\n\n", palindroom);
    }
    else {
            printf("%s is a palindrome!\n\n", palindroom);
    }
    getchar();
    return 0;
}

65A在ASCII中的十进制表示table,90Z的十进制表示,而a97 ( = 65 +32 ) 并且 z122 ( = 90 +32 )