como puedo reducir mas este codigo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE *file;
FILE *file2;
FILE *file3;
char texto=0;
int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,ii=0,j=0,k=0,l=0,m=0,n=0,espacio=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;
int cero=0,uno=0,dos=0,tres=0,cuatro=0,cinco=0,seis=0,siete=0,ocho=0,nueve=0;
/*char abc[]={"abcdefghijklmnopqrstuvwxyz 123456789"};
char cif[]={"kw9svn8y7od6bmxtz4fl3gu2ahp10jcqire5"};*/
int letra[37];
int i,as,aux;
char num;
file = fopen("cifrado.txt","wt");
if(file == NULL){
printf("Error al crear archivo 1\n");
exit(1);
}
file2 = fopen ("estadistica.txt","wt");
if(file2 == NULL){
printf("Error al crear archivo 2\n");
exit(1);
}
file3 = fopen("textosimple.txt","rb");
if(file3 == NULL){
printf("Error al crear archivo 3\n");
exit(1);
}
while(texto != EOF){
texto = fgetc(file3);
switch(texto){
case 'a':
a++;
letra[0] = a;
fputs("k", file);
break;
case 'b':
b++;
letra[1] = b;
fputs("y", file);
break;
case 'c':
c++;
letra[2] = c;
fputs("n", file);
break;
case 'd':
d++;
letra[3] = d;
fputs("1", file);
break;
case 'e':
e++;
letra[4] = e;
fputs("p", file);
break;
case 'f':
f++;
letra[5] = f;
fputs("2", file);
break;
case 'g':
g++;
letra[6] = g;
fputs("s", file);
break;
case 'h':
h++;
letra[7] = h;
fputs("1", file);
break;
case 'i':
ii++;
letra[8] = ii;
fputs("8", file);
break;
case 'j':
j++;
letra[9] = j;
fputs("x", file);
break;
case 'k':
k++;
letra[10] = k;
fputs("7", file);
break;
case 'l':
l++;
letra[11] = l;
fputs("w", file);
break;
case 'm':
m++;
letra[12] = m;
fputs("0", file);
break;
case 'n':
n++;
letra[13] = n;
fputs("9", file);
break;
case ' ':
espacio++;
letra[14] = espacio;
fputs("z", file);
break;
case 'o':
o++;
letra[15] = o;
fputs("3", file);
break;
case 'p':
p++;
letra[16] = p;
fputs("e", file);
break;
case 'q':
q++;
letra[17] = q;
fputs("i", file);
break;
case 'r':
r++;
letra[18] = r;
fputs("6", file);
break;
case 's':
s++;
letra[19] = s;
fputs(" ", file);
break;
case 't':
t++;
letra[20] = t;
fputs("c", file);
break;
case 'u':
u++;
letra[21] = u;
fputs("4", file);
break;
case 'v':
v++;
letra[22] = v;
fputs("j", file);
break;
case 'w':
w++;
letra[23] = w;
fputs("9", file);
break;
case 'x':
x++;
letra[24] = x;
fputs("v", file);
break;
case 'y':
y++;
letra[25] = y;
fputs("h", file);
break;
case 'z':
z++;
letra[26] = z;
fputs("5", file);
break;
case '0':
cero++;
letra[27] = cero;
fputs("u", file);
break;
case '1':
uno++;
letra[28] = uno;
fputs("g", file);
break;
case '2':
dos++;
letra[29] = dos;
fputs("q", file);
break;
case '3':
tres++;
letra[30] = tres;
fputs("m", file);
break;
case '4':
cuatro++;
letra[31] = cuatro;
fputs("b", file);
break;
case '5':
cinco++;
letra[32] = cinco;
fputs("r", file);
break;
case '6':
seis++;
letra[33] = seis;
fputs("f", file);
break;
case '7':
siete++;
letra[34] = siete;
fputs("t", file);
break;
case '8':
ocho++;
letra[35] = ocho;
fputs("d", file);
break;
case '9':
nueve++;
letra[36] = nueve;
fputs("o", file);
break;
default:;
}
}
fprintf(file2,"\n\na = %d\n",a);
fprintf(file2,"b = %d\n",b);
fprintf(file2,"c = %d\n",c);
fprintf(file2,"d = %d\n",d);
fprintf(file2,"e = %d\n",e);
fprintf(file2,"f = %d\n",f);
fprintf(file2,"g = %d\n",g);
fprintf(file2,"h = %d\n",h);
fprintf(file2,"i = %d\n",ii);
fprintf(file2,"j = %d\n",j);
fprintf(file2,"k = %d\n",k);
fprintf(file2,"l = %d\n",l);
fprintf(file2,"m = %d\n",m);
fprintf(file2,"n = %d\n",n);
fprintf(file2,"espacio = %d\n",espacio);
fprintf(file2,"o = %d\n",o);
fprintf(file2,"p = %d\n",p);
fprintf(file2,"q = %d\n",q);
fprintf(file2,"r = %d\n",r);
fprintf(file2,"s = %d\n",s);
fprintf(file2,"t = %d\n",t);
fprintf(file2,"u = %d\n",u);
fprintf(file2,"v = %d\n",v);
fprintf(file2,"w = %d\n",w);
fprintf(file2,"x = %d\n",x);
fprintf(file2,"y = %d\n",y);
fprintf(file2,"z = %d\n",z);
fprintf(file2,"0 = %d\n",cero);
fprintf(file2,"1 = %d\n",uno);
fprintf(file2,"2 = %d\n",dos);
fprintf(file2,"3 = %d\n",tres);
fprintf(file2,"4 = %d\n",cuatro);
fprintf(file2,"5 = %d\n",cinco);
fprintf(file2,"6 = %d\n",seis);
fprintf(file2,"7 = %d\n",siete);
fprintf(file2,"8 = %d\n",ocho);
fprintf(file2,"9 = %d\n",nueve);
fprintf(file2,"\n");
/*for(as=0; as<37; as++){
}*/
for(i=0; i<37; i++){
aux = letra[i];
fprintf(file2,"%d\n",aux);
}
fclose(file);
fclose(file2);
fclose(file3);
printf("\n\n");
printf("Cifrado guardado en archivo\n\n");
printf("Estadistica guardada en archivo\n\n");
return 0;
}
MOD: El código debe ir entre etiquetas de Código GeSHi
Antes que nada: el código debe ir entre etiquetas de Código GeSHi. Puedes seleccionar el código, ir al desplegable de "Código GeSHi" encima del cuadro de texto y elegir el lenguaje correspondiente (C en este caso) o escribir directamente tú las etiquetas en el cuadro de texto de la siguiente manera:
[code=c]
Aquí tu código C
[/code]
Claro que se puede simplificar ese código y además ya tienes comentado por ahí cómo hacerlo: utilizando arrays.
Otro consejo es que utilices constantes en vez de utilizar números sueltos que no se sabe lo que significan. Además si en algún momento quieres cambiar su valor, basta con cambiarlo al declarar la constante y no en todo el código.
// cabeceras
#define NUM_CARACTERES 37 // Constante para el numero de caracteres
int main() {
char abecedario[] = "abcd..";
char cifrado[] = "...";
int estadisticas[NUM_CARACTERES] = {0}; // Inicializamos todo el array a 0
// Se puede hacer una comprobacion para evitar errores en tiempo de ejecucion mediante <assert.h>
assert(strlen(abecedario) == strlen(cifrado) && NUM_CARACTERES >= strlen(abecedario)); // Lanza un error si la condicion no es cierta
FILE *fichero_simple = fopen("texto_simple.txt", "r");
FILE *fichero_cifrado = fopen("texto_cifrado.txt", "wt");
// Comprobar que los ficheros se han abierto correctamente y en caso contrario, terminar el programa
char caracterActual;
int encontrado = 0; // se puede usar bool mediante <stdbool.h>
while((caracterActual = fgetc(fichero_simple)) != EOF) {
for(int i = 0; i < strlen(abecedario) && !encontrado; ++i) {
encontrado = (caracterActual == abecedario[i]);
if(encontrado) {
caracter = cifrado[i];
++estadisticas[i];
}
}
fputc(caracter, fichero_cifrado); // De esta forma si un caracter no lo encuentra, lo copia sin cifrar
encontrado = 0;
}
// Cerrar ficheros de texto simple y cifrado
FILE *fichero_estadisticas = fopen("estadisticas.txt", "wt");
// Comprobar que se ha abierto correctamente
for(int i = 0; i < strlen(abecedario); ++i)
fprintf(fichero_estadisticas, "%c = %d\n", abecedario[i], estadisticas[i]);
// Cerrar fichero de estadisticas
}