0

我必须编写一个程序,该程序基本上将返回一个向前或向后 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;
}
4

3 回答 3

0

一个优雅的解决方案是将字母转换为数字 [0-25] 并使用加法和模运算。查阅 ascii 代码可能会有所帮助,但可以直接使用 'a' 和 'A' 的值来完成。

于 2013-05-16T00:22:09.633 回答
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;
}
于 2013-05-16T00:33:39.733 回答
0

问题出在这里

new_c = c + 13;

ROT-13 是旋转而不是加法

例如,rot13('a')应该是 'a'+13,但rot13('W')应该是 'W'-13 而不是 'W'+13。

于 2013-05-16T00:04:30.787 回答