回文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你就明白了]
谢谢。
如果您不想使用 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 时,取低位字符。
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;
}
65
是A
在ASCII中的十进制表示table,90
是Z
的十进制表示,而a
是 97
( = 65 +32 ) 并且 z
是 122
( = 90 +32 )
我在学校正在研究回文 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你就明白了]
谢谢。
如果您不想使用 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 时,取低位字符。
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;
}
65
是A
在ASCII中的十进制表示table,90
是Z
的十进制表示,而a
是 97
( = 65 +32 ) 并且 z
是 122
( = 90 +32 )