尿毒症抗生素脑病:简单C++找错

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/12 06:22:33
编制程序,将输入的一行字符以加密的形式输出,然后将其解密,解密的字符序列与输入的正文进行比较,吻合时输出解密的正文,否则输出解密失败。
加密时,将每个字符的ascii码依次反复加上“4962873”中的数字,并在32(‘’)~122(’z‘)之间做模运算。解密与加密的顺序相反。例如,对于输入正文“the result of 3 and 2 is not 8",则运行结果为:
xqk""zlvyuzqn""6$jtf(9#m!&pw #
the result of 3 and 2 is not 8
======================================
做来做去结果也不对呀,大家帮我看看,我实在是做不下去了,谢谢。
#include <iostream>
using namespace std;

void main()
{
char a[30];
int i=0,j=0;
gets(a);
puts(a);
int b[7]={4,9,6,2,8,7,3};
for (i=0;i<30 && a[i]!='\0';i++)
{ if (j>6) j=0;
a[i]=a[i]+b[j];
j++;
}

for (i=0;i<30 && a[i]!='\0';i++)
putchar(a[i]);
cout<<"\n";
}
这里说的取模应该怎么做呀,教教我吧。

取模运算在32到122之间,只要while(a[i]>122)a[i]-=91;比如当ASCII码为123时,减去91就为32,更大的就会多减几次,达到取模效果。
还有,你这个例子的加密似乎有问题,我仔细看过ASCII码了,result后面那个空格就开始不对了,那个加密的结果是跳过了这个空格直接到o的。

a[i]没有取模阿,

貌似楼上说的对