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求余是什么意思?谢谢。
展开
 我来答
百度网友4a058873bd
2014-04-18 · TA获得超过164个赞
知道小有建树答主
回答量:170
采纳率:100%
帮助的人:142万
展开全部
你的改动不可以,之所以你的调试结果对,那是因为你没有用边界值去测试。
这个加密方法是用的循环码,也就是用字母推后两个位置,即用C代替A,用D代替B,那么Z用什么来代替呢?那就是B。除以26的目的就是当超过26后,通过求余数的方式折回头部去。
(soustr[j]-'A'+2)的意思就是将26个字母编号为1~26。
xoaxa
2014-04-18 · TA获得超过8611个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3498万
展开全部
#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;
 }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
matlab2000
2014-04-18 · TA获得超过2323个赞
知道大有可为答主
回答量:1678
采纳率:100%
帮助的人:1060万
展开全部
26是有26个英文字母,字母往后移动两位,如果超过最后的Z,就回绕,所以有%操作。你的如果是Y,Z,估计就不是字母了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大秃象
2014-04-18
知道答主
回答量:14
采纳率:0%
帮助的人:3.9万
展开全部
secstr[j] = (soustr[j]+2); 是错误的 你试一下输入z或y或 就知道了
应该写成secstr[j] = (soustr[j]-'A'+2)%26+'A' 这样 输入字母Z或Y是就不会出错
对26求余就是求字母偏移的实际值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式