⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 caesar.c

📁 caesar cipher 分析 能够分析单个替代的caesar cipher
💻 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 + -