我正在尝试解决以下问题:
编写一个程序,从键盘上读取一个字符。这个项目将打印:
如果字符是小写的,则表示该字符的大写版本小写版本的字符,如果它是大写的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 = 65
和c = 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表