主题:有个定义类错误 知道的麻烦看下
会C++的大哥麻烦近来看下 ~~小小的问题:)
从网上找了一个playfair程序 但是运行一直出现一个定义类错误 自己改不了 会的帮忙改下 谢谢拉~程序如下:
#include <iostream>
#include<stdlib.h>
using namespace std;
#define MAX 1000 //明文空间最大字符数
int main()
{
FILE *fp;
int i=0;
char a[MAX],b[MAX],k[10]; //数组a存放明文字符,数组b存放密文字符,数组k存放密钥字符
fp=fopen("plaintext.txt","r");
//将plaintext.txt中的明文读入明文数组a
do
{
char ch=NULL;
fscanf(fp,"%c",&ch); //数组a存放明文字符
if(ch!=' ') //滤除输入中的空格
a[i++]=ch;
}
while(i<MAX&&a[i-1]!='\n');
static int q=i; //q为回车位,明文共q-1个字符
//提示可能的明文空间溢出
if(q-1>=1900)
cout<<"May be overflow..."<<endl;
//将明文中的字符j换为i
for(i=0;i<q-1;i++)
{
if(a=='j')
a='i';
}
//将plaintext中的密钥读入密钥数组k
i=0;
do
{
fscanf(fp,"%c",&k[i++]);
}
while(i<10&&k[i-1]!='\n');
int p=i-1; //共p位密钥
//将密钥中的字符j换为i
for(i=0;i<p;i++)
{
if(k=='j')
k='i';
}
//删掉密钥中重复的字符
for(i=1;i<p;i++)
for(int j=0;j<i;j++)
if(k==k[j])
{
for(int l=i;l<p-1;l++)
k[l]=k[l+1];
p--;
}
char m[5][5]; //密钥矩阵
char m1[25]; //暂存密钥矩阵元素的辅助数组
//将密钥元素填入数组m1
for(i=0;i<p;i++)
m1=k;
//将密钥后的其它字母补入数组m1
for(i=p;i<25;i++)
for(int h=97;h<=122;h++)
{
if(h==106) //////////不要字符j//////////////////
continue;
int is=1; //判断后补入m1的元素是否和密钥重复
for(int e=0;e<i;e++)
{
if(m1[e]==char(h))
{
is=0;
break; //break只能跳for和while循环
}
}
if(is)
{
m1=char(h);
break;
}
}
//将数组m1的元素赋给矩阵m
int j,l; //i为矩阵行标,j为列标,l指m1数组位标
for(i=0;i<5;i++)
for(j=0,l=i*5;j<5,l<(i+1)*5;j++,l++)
m[j]=m1[l];
//在明文连续相同字符间插入字符x
int ix=0; //判断是否需要插x
int nx=0; //计算插入x的个数
for(i=0;i<q/2;i++)
{
if(ix)
{
i=0; //如果插过x,数组奇偶排列已打乱,需重新处理
ix=0;
}
if(a[i*2]==a[i*2+1])
{
for(j=q-1;j>=i*2+1;j--)
a[j]=a[j-1];
a[i*2+1]='x';
nx++;
ix=1;
}
}
//如果明文总长为奇数,在后面再补一个x
if((q-1+nx)%2!=0)
{
a[q-1+nx]='x';
nx++; //现明文总长为q-1+nx,且为偶数
}
//利用playfair密钥矩阵,将明文空间映射到密文空间
int r1=5,l1=5; //r和l分别为矩阵m的行标和列标
int r2=5,l2=5;
for(int g=0;g<(q-1+nx)/2;g++) //g为数组a和b的行标
{
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(a[g*2]==m[j])
{
r1=i;
l1=j;
}
if(a[g*2+1]==m[j])
{
r2=i;
l2=j;
}
}
if(r1==r2) //在同一行
{
b[g*2]=m[r1][(l1+1)%5];
b[g*2+1]=m[r2][(l2+1)%5];
}
else if(l1==l2) //在同一列
{
b[g*2]=m[(r1+1)%5][l1];
b[g*2+1]=m[(r2+1)%5][l2];
}
else if(l1<l2)
{
b[g*2]=m[r1][l2];
b[g*2+1]=m[r2][l1];
}
else
{
b[g*2]=m[r2][l1];
b[g*2+1]=m[r1][l2];
}
}
//输出密文到ciphertext.txt
FILE* fo=fopen("ciphertext.txt","w");
for(g=0;g<q-1+nx;g++)
fprintf(fo,"%c",b[g]);
fprintf(fo,"\n");
fclose(fp);
fclose(fo);
return 0;
}[em17]
从网上找了一个playfair程序 但是运行一直出现一个定义类错误 自己改不了 会的帮忙改下 谢谢拉~程序如下:
#include <iostream>
#include<stdlib.h>
using namespace std;
#define MAX 1000 //明文空间最大字符数
int main()
{
FILE *fp;
int i=0;
char a[MAX],b[MAX],k[10]; //数组a存放明文字符,数组b存放密文字符,数组k存放密钥字符
fp=fopen("plaintext.txt","r");
//将plaintext.txt中的明文读入明文数组a
do
{
char ch=NULL;
fscanf(fp,"%c",&ch); //数组a存放明文字符
if(ch!=' ') //滤除输入中的空格
a[i++]=ch;
}
while(i<MAX&&a[i-1]!='\n');
static int q=i; //q为回车位,明文共q-1个字符
//提示可能的明文空间溢出
if(q-1>=1900)
cout<<"May be overflow..."<<endl;
//将明文中的字符j换为i
for(i=0;i<q-1;i++)
{
if(a=='j')
a='i';
}
//将plaintext中的密钥读入密钥数组k
i=0;
do
{
fscanf(fp,"%c",&k[i++]);
}
while(i<10&&k[i-1]!='\n');
int p=i-1; //共p位密钥
//将密钥中的字符j换为i
for(i=0;i<p;i++)
{
if(k=='j')
k='i';
}
//删掉密钥中重复的字符
for(i=1;i<p;i++)
for(int j=0;j<i;j++)
if(k==k[j])
{
for(int l=i;l<p-1;l++)
k[l]=k[l+1];
p--;
}
char m[5][5]; //密钥矩阵
char m1[25]; //暂存密钥矩阵元素的辅助数组
//将密钥元素填入数组m1
for(i=0;i<p;i++)
m1=k;
//将密钥后的其它字母补入数组m1
for(i=p;i<25;i++)
for(int h=97;h<=122;h++)
{
if(h==106) //////////不要字符j//////////////////
continue;
int is=1; //判断后补入m1的元素是否和密钥重复
for(int e=0;e<i;e++)
{
if(m1[e]==char(h))
{
is=0;
break; //break只能跳for和while循环
}
}
if(is)
{
m1=char(h);
break;
}
}
//将数组m1的元素赋给矩阵m
int j,l; //i为矩阵行标,j为列标,l指m1数组位标
for(i=0;i<5;i++)
for(j=0,l=i*5;j<5,l<(i+1)*5;j++,l++)
m[j]=m1[l];
//在明文连续相同字符间插入字符x
int ix=0; //判断是否需要插x
int nx=0; //计算插入x的个数
for(i=0;i<q/2;i++)
{
if(ix)
{
i=0; //如果插过x,数组奇偶排列已打乱,需重新处理
ix=0;
}
if(a[i*2]==a[i*2+1])
{
for(j=q-1;j>=i*2+1;j--)
a[j]=a[j-1];
a[i*2+1]='x';
nx++;
ix=1;
}
}
//如果明文总长为奇数,在后面再补一个x
if((q-1+nx)%2!=0)
{
a[q-1+nx]='x';
nx++; //现明文总长为q-1+nx,且为偶数
}
//利用playfair密钥矩阵,将明文空间映射到密文空间
int r1=5,l1=5; //r和l分别为矩阵m的行标和列标
int r2=5,l2=5;
for(int g=0;g<(q-1+nx)/2;g++) //g为数组a和b的行标
{
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(a[g*2]==m[j])
{
r1=i;
l1=j;
}
if(a[g*2+1]==m[j])
{
r2=i;
l2=j;
}
}
if(r1==r2) //在同一行
{
b[g*2]=m[r1][(l1+1)%5];
b[g*2+1]=m[r2][(l2+1)%5];
}
else if(l1==l2) //在同一列
{
b[g*2]=m[(r1+1)%5][l1];
b[g*2+1]=m[(r2+1)%5][l2];
}
else if(l1<l2)
{
b[g*2]=m[r1][l2];
b[g*2+1]=m[r2][l1];
}
else
{
b[g*2]=m[r2][l1];
b[g*2+1]=m[r1][l2];
}
}
//输出密文到ciphertext.txt
FILE* fo=fopen("ciphertext.txt","w");
for(g=0;g<q-1+nx;g++)
fprintf(fo,"%c",b[g]);
fprintf(fo,"\n");
fclose(fp);
fclose(fo);
return 0;
}[em17]