我必须编写一个程序,它基本上会返回一个向前或向后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;
}
答案 0 :(得分:0)
问题出在这里
new_c = c + 13;
ROT-13 轮换,而非添加。
例如,rot13('a')
应为'a'+ 13,
但是rot13('W')
应该是'W'-13而不是'W'+13。
答案 1 :(得分:0)
优雅的解决方案包括将字母翻译为数字[0-25]并使用加法和模运算。咨询ascii代码可能有所帮助,但可以直接使用'a'和'A'的值来实现。
答案 2 :(得分:0)
也许
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;
}