我必须编写一个程序,它将返回一个向前或向后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;
}
问题在这里
new_c = c + 13;
ROT-13是旋转,而不仅仅是加法。
例如,rot13('a')
应为'a'+13,但是rot13('W')
应该是'W'-13而不是'W'+13。
一个优雅的解决方案是将字母转换为数字[0-25],并使用加法和取模运算。参考ascii码可能会有所帮助,但也可以直接使用'a'和'a'的值。
maybe
char char_rot_13(char c){
char new_c;
if (c >= 'a' && c <= 'z')
{
new_c = c + 13;
if(new_c > 'z')
new_c -= 26;
}
else if (c >= 'A' && c <= 'Z')
{
new_c = c + 13;
if(new_c > 'Z')
new_c -= 26;
}
return new_c;
}