我的代码涉及rot-13有问题

时间:2013-05-15 23:57:43

标签: c character uppercase lowercase rot13

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

3 个答案:

答案 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;
}