C语言 在涉及rot-13的代码中遇到麻烦



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

相关内容

  • 没有找到相关文章

最新更新