C语言 将字母从大写转换为小写,反之亦然



我正在尝试解决以下问题:

编写一个程序,从键盘上读取一个字符。这个项目将打印:

如果字符是小写的,则表示该字符的大写版本小写版本的字符,如果它是大写的ASCII码输入:a输出:a

这是我的解决方案:

#include <stdio.h>
int main(){
char upper[26] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
char lower[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
char c;
scanf("%c", &c);
for(int i=0; i <= 26; i++) {
if(c==upper[i]) {
printf("%c", lower[i]);
break;
} else if(c==lower[i]){
printf("%c", upper[i]);
break;
} else if(i==26) { //not in the english alphabet
printf("%d", c);
}
}
return 0;
}

我处理这个问题的方法有什么问题吗?我的大学使用一个带有隐藏测试的平台,我的解决方案为2/15个测试提供了错误的输出,并为另一个测试抛出了运行时错误,而以下代码通过了所有测试:

#include <stdio.h>

int main()
{
char a;

scanf("%c",&a);
if(a>='A'&&a<='Z')
{
printf("%c",a+32);
}
else if(a>='a'&&a<='z')
{
printf("%c",a-32);
}
else
{
printf("%d",a);
}
}

如果唯一的目标是将单个字符转换为相反的大小写,那么您可以考虑使用ASCII值:

大写字母范围为65~90,小写字母范围为97~122。这意味着charc = 65c = A是一样的。

考虑到这一点,你可以这样做:

if (c > 96 && c < 122)
c -= 32;
else if (c > 64 && c < 91)
c += 32;

这样,如果ASCII值表示小写字符,只需减去32(90和65之间的差值)。但是,如果ASCII值表示大写字符,则相反,并加上32。

如果这样更容易理解,你也可以这样做:

if (c >= 'a' && c <= 'z')
c -= 32;
else if (c >= 'A' && c <= 'Z')
c += 32;

编辑:你可以在这里查阅ASCII表

最新更新