📄 caesar.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sum=0;
int 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=0;
void decode (char data[], int code);
void toCalculate(char s1[]);
int main()
{
float data[30];
FILE *fp1;
FILE *fp2;
char buf[1024];
if( (fp1=fopen("d:\\abc.txt","r"))==NULL )
{
printf("open file failed or no abc.txt! @ d:\n");
system("pause");
exit(0);
}
printf("Open file successed \n");
while(!feof(fp1))
{
memset(buf, 0, 1024);
fgets(buf, 1024, fp1);
toCalculate(buf);
}
fclose(fp1);
printf("Total number of char is : %d\n",sum);
float f1=sum+0.0;
printf("\n\n the frequency table\n");
printf("\n\n+++++++++++++++++++++++++++++++++++++++++++++\n");
printf("a=%2.3f%% b=%2.3f%% c=%2.3f%% d=%2.3f%% e=%2.3f%%\n",a/f1*100, b/f1*100,c/f1*100,d/f1*100,e/f1*100);
printf("f=%2.3f%% g=%2.3f%% h=%2.3f%% i=%2.3f%% j=%2.3f%%\n",f/f1*100, g/f1*100,h/f1*100,i/f1*100,j/f1*100);
printf("k=%2.3f%% l=%2.3f%% m=%2.3f%% n=%2.3f%% o=%2.3f%%\n",k/f1*100, l/f1*100,m/f1*100,n/f1*100,o/f1*100);
printf("p=%2.3f%% q=%2.3f%% r=%2.3f%% s=%2.3f%% t=%2.3f%%\n",p/f1*100, q/f1*100,r/f1*100,s/f1*100,t/f1*100);
printf("u=%2.3f%% v=%2.3f%% w=%2.3f%% x=%2.3f%% y=%2.3f%%\n",u/f1*100, v/f1*100,w/f1*100,x/f1*100,y/f1*100);
printf("z=%2.3f%%",z/f1*100);
printf("\n+++++++++++++++++++++++++++++++++++++++++++++\n");
//prepare to decode
data[0]=a;
data[1]=b;
data[2]=c;
data[3]=d;
data[4]=e;
data[5]=f;
data[6]=g;
data[7]=h;
data[8]=i;
data[9]=j;
data[10]=k;
data[11]=l;
data[12]=m;
data[13]=n;
data[14]=o;
data[15]=p;
data[16]=q;
data[17]=r;
data[18]=s;
data[19]=t;
data[20]=u;
data[21]=v;
data[22]=w;
data[23]=x;
data[24]=y;
data[25]=z;
int max,min;
max=data[0];
min=data[0];
int con; //
for( con=0;con<26;con++)
{
if(max<data[con])
max=data[con];
if(min>data[con])
min=data[con];
}
printf("the max frequency is =%d\n",max);
int mm=4;
int code;
for( con=0;con<26;con++)
{
if( max == data[con])
{
printf("the e exchange location to %d \n ",con );
code = con - mm;
}
}
fp2=fopen("d:\\decode.txt","w");
fp1=fopen("d:\\abc.txt","r");
while(!feof(fp1))
{
memset(buf, 0, 1024);
fgets(buf, 1024, fp1);
decode(buf,code);
fputs(buf, fp2);
}
fclose(fp1);
printf("Done!!\nThe decoded file saved to d:/decode.txt\n");
system("pause");
return 0;
}
void toCalculate (char s1[])
{
int itemp = 0;
char temp;
while (s1[itemp]!='\0')
{
if (s1[itemp]>='A' && s1[itemp]<='Z')
{
sum++;
}
else if (s1[itemp]>='a'&&s1[itemp]<='z')
{
sum++;
}
temp=s1[itemp];
switch(temp)
{
case 'a':
case 'A':a++;break;
case 'b':
case 'B':b++;break;
case 'c':
case 'C':c++;break;
case 'd':
case 'D':d++;break;
case 'e':
case 'E':e++;break;
case'f':
case'F': f++;break;
case'g':
case'G': g++;break;
case'h':
case'H': h++;break;
case'i':
case'I':i++; break;
case'j':
case'J':j++; break;
case'k':
case'K':k++; break;
case'l':
case'L':l++; break;
case'm':
case'M':m++; break;
case'n':
case'N':n++; break;
case'o':
case'O':o++; break;
case'p':
case'P':p++; break;
case'q':
case'Q':q++; break;
case'r':
case'R':r++; break;
case's':
case'S':s++; break;
case't':
case'T':t++; break;
case'u':
case'U':u++; break;
case'v':
case'V':v++; break;
case'w':
case'W':w++; break;
case'x':
case'X':x++; break;
case'y':
case'Y':y++; break;
case'z':
case'Z':z++; break;
}
itemp++;
}
}
void decode (char data[], int code)
{
int i = 0;
while (data[i]!='\0')
{
if(data[i]>='A' && data[i]<='Z')
{
if(data[i]-code > 'Z')
data[i]=data[i]-code-26;
else if (data[i]-code <'A')
data[i]=data[i]-code+26;
else data[i]=data[i]-code;
}
else if (data[i]>='a'&& data[i] <= 'z')
{
if(data[i]-code > 'z')
data[i]=data[i]-code-26;
else if (data[i]-code <'a')
data[i]=data[i]-code+26;
else data[i]=data[i]-code;
}
i++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -