调了半天,楼主真是太粗心了!middle1[]应该这样声明:
char middle1[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
最后输出start的时候要注意控制长度,改个for循环就好了!
#includestdio.h
#includestring.h
int main(void)
{
int i,j,length,n;
char temp;
char middle2[27];
char start[201],finish[201];
char middle1[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
gets(middle2);
gets(finish);
scanf("%d",n);
length=strlen(finish);
for(i=0;i25;i++)
{
for(j=i+1;j26;j++)
{
if(middle2[i]middle2[j])
{
temp=middle2[i];
middle2[i]=middle2[j];
middle2[j]=temp;
temp=middle1[i];
middle1[i]=middle1[j];
middle1[j]=temp;
}
}
}
for(i=1;i=n;i++)
{
for(j=0;jlength;j++)
{
if(finish[j]==' ')
{
start[j]=' ';
}
else
{
start[j]=middle1[finish[j]-'A'];
}
}
}
for( i = 0;i length;++i)
printf("%c",start[i]);
printf("\n");
return 0;
}
/*
ABCDEFGHIJKLMNOPQRSTUVWXYZ
*/
#includestdio.h
main()
{
char s[30];
int i=0;
gets(s);
while(s[i]!='\0')
{
if(s[i]='a's[i]='v'||s[i]='A's[i]='V')
s[i]+=4;
else if(s[i]='w's[i]='z')
s[i]=('a'-1)+4-('z'-s[i]);
else
{
if(s[i]='W's[i]='Z')
s[i]=('A'-1)+4-('Z'-s[i]);
}
i++;
}
puts(s);
//system("pause");
return 0;
}
include iostream;
using namespace std;
#define N 6 //定义N的大小
#define M 5 //定义M的大小,N=M
void main()
{
char P[N]={0};
char K[M]={0};
char C[M]={0};//因为要用Ki加密,所以C[]只能有M个大
int i,j;//定义循环变量
cout "请输入明文数组,你可以输入"N"个字符长度"endl;
for (i=0;iN;i++)//为P[N]赋值
{
cout " P"i"=";
cin P[i];
}
cout "请输入密钥数组,你可以输入"M"个字符长度"endl;
for (j=0;jM;j++)//为K[M]赋值
{
cout "K"j"=";
cin K[j];
}
for (i=0;iM;i++)//加密!因为K[j]个数有限,只能用M做为循环次数
{
j=i%(M+1);
C[i]=P[i]+K[j];
cout P[i]endl;
cout K[j]endl;
cout C[i]endl;
if (0C[i])//7F=127
{
//C[cnt]=P[cnt]+K[i%(j+1)];//Ci=Pi+Kj(j=i mod(m+1)) (当Ci=7FH)
C[i]=C[i]+128;
cout C[i]endl;
}
else
{
//C[cnt]=P[cnt]+K[i%(j+1)]-128;//Ci=Pi+Kj-80H(j=i mod(m+1)) (当Ci7FH)
C[i]=C[i];
cout C[i]endl;
}
}
coutendlendl"输出加密后的密文C[i]如下:"endl;
for (i=0;i=40;i++)
cout "#";
cout endl;
for (i=0;iM;i++)//输出加密后的C[i]
{
cout C[i]endl;
}
for (i=0;i=40;i++)
cout "#";
cout endl;
for (i=0;iM;i++)//解密!因为K[j]个数有限,只能用M做为循环次数
{
j=i%(M+1);
if (C[i]=K[j])
{
P[i]=C[i]-K[j]+128;//Pi=Ci-Kj (j=i mod(m+1)) (当Ci=Kj)
}
else
{
P[i]=C[i]-K[j];//80H=128,Pi=Ci-Kj+80H(j=i mod(m+1))(当CiKj)
}
}
coutendlendl"输出解密后的明文P[i]如下:"endl;
for (i=0;i=36;i++)
cout "#";
cout endl;
for (i=0;iN;i++)//输出解密后的P[i]
{
cout P[i]endl;
}
for (i=0;i=36;i++)
cout "#";
cout endlendl;
#includestdio.h
#includestdlib.h
void jam();//声明加密函数
void jem();//声明解密函数
char mw[80],yw[80];//存放原文或密文的数组
void main()
{ char F;
do{
system("CLS");
printf(" 请选择:\n");
printf("1、加密\n");
printf("2、解密\n");
printf("0、退出\n");
scanf("%c",F);
getchar();
switch(F)
{ case '1':
jam();
case '2':
jem(); }
} while(F!='0');
}
void jem()//解密函数
{ int j,n;
printf("请输入密文:\n");
gets(mw);
printf("密文是%s\n",mw);
j=0;
do//每循环处理一个字符
{
if (mw[j]='A' mw[j]='Z')
{ n = mw[j]- 64 -13;//原文大写字符在字母表中位置
yw[j]= n = 0?'Z'+ n:n%26 + 64;}//原文大写字符
else if (mw[j]='a' mw[j]='z')
{ n = mw[j]- 96 -13;//原文小写字符在字母表中位置
yw[j]= n = 0?'z'+ n:n%26 + 96;}//原文小写字符
else
yw[j]=mw[j];//忽略非字母
j++;
}while(mw[j]!='\0');
yw[j]=mw[j];
printf("原文是%s\n",yw);
getchar();}
void jam()//加密函数
{ int j,n;
printf("请输入原文:\n");
gets(mw);
printf("原文是%s\n",mw);
j=0;
do//每循环处理一个字符
{
if (mw[j]='A' mw[j]='Z')
{n=(mw[j]-64+13)%26;//密文大写字符在字母表中位置
yw[j]=(n==0?'Z':(n+64));}//密文大写字符
else if (mw[j]='a' mw[j]='z')
{n=(mw[j]-96+13)%26;//密文小写字符在字母表中位置
yw[j]=(n==0?'z':(n+96));}//密文小写字符
else
yw[j]=mw[j];//忽略非字母
j++;
}while(mw[j]!='\0');
yw[j]=mw[j];
printf("密文是%s\n",yw);
getchar();}
/*说明:
1、菜单调用加密或解密函数
2、加密时,逐个加密mw数组中字母,忽略非字母
3、解密时,逐个解密数组mw中字母,忽略非字母
4、加密算法是把原字符ascii码+13,解密算法是把密字符ascii码-13,但必须考虑模
运行效果如下图*/
给,已经在VC上编译运行确认了:
#includeconio.h
#includestdio.h
#define N 20 //暂定密钥词最长为20个字符
#define M 100 //暂定输入明文最长为100个字符
void main()
{
int key[N]={NULL},keylength=0;
int beforeStr[M]={NULL},strlength=0;
int afterStr[M]={NULL};
int i,j;
char ch;
printf("请输入密钥单词: ");
while((ch=getchar())!='\n') key[keylength++]=ch-'a';
printf("请输入明文: ");
while((ch=getchar())!='\n')
{
if(ch='a'ch='z')
beforeStr[strlength++]=ch-'a';
else beforeStr[strlength++]=ch-'\0';
}
for(i=0,j=0;istrlength;i++)
{
if(beforeStr[i]=0beforeStr[i]=25)
{
afterStr[i]=(beforeStr[i]+key[j%keylength])%26;
j++;
}
else afterStr[i]=beforeStr[i];
}
printf("加密后为: ");
for(i=0;istrlength;i++)
{
if(afterStr[i]=0afterStr[i]=25) printf("%c",afterStr[i]+'a');
else printf("%c",afterStr[i]+'\0');
}
getch();
}