求大神看看
#include <stdio.h>main()
{
int ch;
printf("请输入");
while ((ch=getchar())!='\n')
{
if(ch>='a'&&ch<='z')
{
ch=ch+3;
}
if(ch>='A',ch<='Z')
{
ch=ch+3;
}
}
putchar('\n');
}这是我写的
putchar('a' + (ch - 'a' + 3) % 26);这是答案中if里面的
continue;
能不能讲下我错在哪里和答案这个是什么意思 要求:用户输入一行明文(字符串),针对字母进行加密(偏移量设置为 3),非字母部分保留原型注意:字母 y 应该被替换为字母 b,而字母 z 应该被替换为字母 c。 本帖最后由 sunrise085 于 2020-5-20 00:01 编辑
你一楼写的有点乱,没看太明白。
程序的逻辑问题是,没考虑xyz和XYZ自加3之后超出字母范围,将之改为abc和ABC的情况。
putchar('a' + (ch - 'a' + 3) % 26);这个就考虑到了把最后的三个字符改为最前面三个字符的情况。
假设输入字符是ch= ‘’‘’x ,'a' + (ch - 'a' + 3) % 26得到的就是'a';若输入的是ch='h','a' + (ch - 'a' + 3) % 26得到的就是'k'
#include <stdio.h>
int main()
{
int ch;
printf("请输入:");
while ((ch=getchar())!='\n')
{
if(ch>='a' && ch<='z')
{
ch='a' + (ch - 'a' + 3) % 26;
}
if(ch>='A'&& ch<='Z')
{
ch='A' + (ch - 'A' + 3) % 26;
}
putchar(ch);
}
return 0;
} 本帖最后由 Cute_Traver_Cat 于 2020-5-20 00:04 编辑
应该是错在最后三个字母的问题,小写字母转换后会成为大写x->A,y->B,z->C
ascii转换如下
应该是错在最后三个字母的问题,小写字母转换后会成为大写x->A,y->B,z->C,
<a=97,z=122>
<举例r=114,x=120>
>>> 38 % 26
12
>>> 114 - 97
17
>>> 17+3
20
>>> 20%26
20
>>> +97
97
>>> 20+97
117
>>> 120 -97
23
>>> 23 +3
26
>>> 26%26
0
>>> 0+97
97
>>>
页:
[1]