在学校我正在做一个回文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即可理解]
感谢。
答案 0 :(得分:0)
如果您不想使用tolower
或toupper
,可以这样做:
// 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
的十进制表示,A
是90
的十进制表示,而Z
是a
(= 65 +32)且97
为z
(= 90 +32)