C语言程序设计 简单加密程序
/*exer4-2字符加密*/#include<stdio.h>#include<string.h>voidmain(void){unsignedintj;charsou...
/* exer 4-2 字符加密 */
#include<stdio.h>
#include<string.h>
void main(void)
{
unsigned int j;
char soustr[80],secstr[80];
//printf("please enter soustr:");
gets(soustr);
for(j=0; j<=strlen(soustr); j++)
{
if(soustr[j]>='A' && soustr[j]<='Z' )
secstr[j] = (soustr[j]-'A'+2)%26+'A';
else if(soustr[j]>='a' && soustr[j]<='z' )
secstr[j] = (soustr[j]-'a'+2)%26+'a';
else
secstr[j] = soustr[j];
}
puts(secstr);
}
secstr[j] = (soustr[j]-'A'+2)%26+'A'; 这个地方我写的是 secstr[j] = (soustr[j]+2); 调试结果也是对的,这么做可以吗?有什么区别?他这句是什么意思麻烦解释一下,对26求余是什么意思?谢谢。 展开
#include<stdio.h>
#include<string.h>
void main(void)
{
unsigned int j;
char soustr[80],secstr[80];
//printf("please enter soustr:");
gets(soustr);
for(j=0; j<=strlen(soustr); j++)
{
if(soustr[j]>='A' && soustr[j]<='Z' )
secstr[j] = (soustr[j]-'A'+2)%26+'A';
else if(soustr[j]>='a' && soustr[j]<='z' )
secstr[j] = (soustr[j]-'a'+2)%26+'a';
else
secstr[j] = soustr[j];
}
puts(secstr);
}
secstr[j] = (soustr[j]-'A'+2)%26+'A'; 这个地方我写的是 secstr[j] = (soustr[j]+2); 调试结果也是对的,这么做可以吗?有什么区别?他这句是什么意思麻烦解释一下,对26求余是什么意思?谢谢。 展开
4个回答
展开全部
#include <stdio.h>
#include <string.h>
int main(void) {
unsigned int j;
char soustr[80],secstr[80];
//printf("please enter soustr:");
gets(soustr);
for(j = 0; j < strlen(soustr); j++) {
if(soustr[j] >= 'A' && soustr[j] <= 'Z')
// 求余操作使'Y' + 2 == 'A','Z' + 2 == 'B'
secstr[j] = (soustr[j] - 'A' + 2) % 26 + 'A';
else if(soustr [j] >= 'a' && soustr[j] <= 'z')
secstr[j] = (soustr[j] - 'a' + 2) % 26 + 'a';
}
puts(secstr);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
26是有26个英文字母,字母往后移动两位,如果超过最后的Z,就回绕,所以有%操作。你的如果是Y,Z,估计就不是字母了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
secstr[j] = (soustr[j]+2); 是错误的 你试一下输入z或y或 就知道了
应该写成secstr[j] = (soustr[j]-'A'+2)%26+'A' 这样 输入字母Z或Y是就不会出错
对26求余就是求字母偏移的实际值
应该写成secstr[j] = (soustr[j]-'A'+2)%26+'A' 这样 输入字母Z或Y是就不会出错
对26求余就是求字母偏移的实际值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |