Palindrome C程序将大写字母转换为小写字母

时间:2018-01-07 19:33:49

标签: c string palindrome 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即可理解]

感谢。

2 个答案:

答案 0 :(得分:0)

如果您不想使用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时,您得到一个较低的字符。

答案 1 :(得分:0)

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

(defn foo [x]
  (type x))

(defn bar [^String x]
  (type x))

(foo "abc") => java.lang.String
(foo 123)   => java.lang.Long

(bar "abc") => java.lang.String
(bar 123)   => java.lang.Long

修改后的程序:

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; } 是ASCII表中65的十进制表示,A90的十进制表示,而Za (= 65 +32)且97z(= 90 +32)