【发布时间】:2013-05-15 23:57:42
【问题描述】:
我必须编写一个程序,它基本上会返回一个向前或向后 13 位的字符。它仅适用于字母表中的字符,如果是小写,则保持小写,如果是大写,则保持大写。
char char_rot_13(char c);
到目前为止,我已经做了两个条件语句,一个用于小写字符,一个用于从 a 到 z 的大写字符。然后我返回,在每一个中,new_character = c + 13。但是当我尝试一个带有'W'的测试用例时,测试失败了。
char char_rot_13(char c)
{
char new_c;
if (c >= 'a' && c <= 'z')
{
new_c = c + 13;
}
else if (c >= 'A' && c <= 'Z')
{
new_c = c + 13;
}
return new_c;
}
【问题讨论】:
-
我理解你想要做什么,但是,有一个异常:你将返回一个不是字母表中的字母的字符。你能试着用'z'测试一下,看看我的意思吗
-
当您将一个值添加到
c并将其发送到“Z”之后,计算机不知道“环绕”。W+ 13 = 'd' in ASCII 但你想要的是'J'。如何让它环绕,以便从“A”开始计数是你必须弄清楚的。 -
@Adeeb:我明白你的意思,当我测试它时,它告诉我预期的结果是“?”。那么要解决这个问题,我将如何排除那些不是字母的特殊字符?
-
@MattPhillips:我明白你的意思,所以,为了避免回绕,我是否必须确定何时减去 13 个位置而不是添加 13 个位置?
-
是的,在这种情况下可以这样做,因为方便的是 26/13 = 2。对于一般情况,您需要使用
%(模数)。
标签: c character uppercase lowercase rot13