Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我的代码涉及rot-13有问题吗_C_Character_Uppercase_Lowercase_Rot13 - Fatal编程技术网

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

C 我的代码涉及rot-13有问题吗,c,character,uppercase,lowercase,rot13,C,Character,Uppercase,Lowercase,Rot13,我必须编写一个程序,基本上返回一个向前或向后13位的字符。它只适用于字母表中的字符,如果是小写,则保持小写;如果是大写,则保持大写 char char_rot_13(char c); 到目前为止,我已经做了两个条件语句,一个用于小写,一个用于大写字符,从a到z。然后我返回,在每一个,新的字符=c+13。但是当我尝试一个带有“W”的测试用例时,测试失败了 char char_rot_13(char c) { char new_c; if (c >= 'a' &&

我必须编写一个程序,基本上返回一个向前或向后13位的字符。它只适用于字母表中的字符,如果是小写,则保持小写;如果是大写,则保持大写

    char char_rot_13(char c);
到目前为止,我已经做了两个条件语句,一个用于小写,一个用于大写字符,从a到z。然后我返回,在每一个,新的字符=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;
}
char char\u rot\u 13(char c)
{
char new_c;
如果(c>='a'&&c='a'&&c问题就在这里

new_c = c + 13;
ROT-13是旋转,而不仅仅是添加

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

一个优雅的解决方案是将字母翻译成数字[0-25],并使用加法和模运算。这可能有助于查询ascii码,但也可以直接使用'a'和'a'的值进行操作。

可能

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;
}
char char\u rot\u 13(char c){
char new_c;
如果(c>='a'和&c'z')
新的_c-=26;
}
如果(c>='A'&&c'Z')为else,则为
新的_c-=26;
}
返回新的\u c;
}

我明白你想做什么,但是,有一个异常现象:你将返回一个字符,它不是字母表中的一个字母。你能试着用“z”测试它,看看我的观点吗?当你向
c
添加一个值并将其发送到“z”之后,计算机不知道如何“换行”。
W
+13='d'在ASCII中,但你需要什么“想要的是‘J’。如何让它环绕,使计数从‘A’开始,这是你必须弄清楚的。@Adeeb:我明白你的意思,当我测试它时,它告诉我预期的结果是‘A’?。所以要解决这个问题,我如何排除那些不是字母的特殊字符?@MattPhillips:我明白你的意思,所以,为了避免环绕。”,我是否必须确定何时减去13位而不是向字符中添加13位?是的,在这种情况下就可以了,因为26/13=2。对于一般情况,您需要使用
%
(模数)。我不能使用字符的整数值。:(谢谢您的帮助!我想我已经解决了!