Ich erstelle einen Algorithmus, der Zahlen (Zahlen wie Zeichenfolgen) von 0 bis 9999 generiert und seine Häufigkeit in einem Array a [50000] sucht.Fehler beim Drucken einer Zeichenfolge
char key[4];
int freq;
for (int i = 0; i < 10000; i++) {
sprintf(key,"%04i",i); // save 4 digits in key, if i <1000 save leading 0's
freq = BruteForceStringMatch(key,a,n); //n length of a.
printf("%s-%i\n",key,freq);
}
free(a);
aber wenn ich das Programm ausführen, bekomme ich es.
.
.
.
9845-7
9846
-10
9847-4
9848-5
-139
9850-3
9851-6
9852-5
9853-4
9854-2
9855-7
9856-5
9857-4
9858-5
9859 -9
9860-3
.
.
.
9968-6
9969 -9
9970-5
9971-4
9972-7
9973-6
9974-6
9975-2
9976-7
9977-4
9978-2
9979-7
9980-3
9981-4
9982-3
9983 -9
9984-6
9985-7
998-8
9987 -9
9988-3
9989 -9
9990-4
9991-3
9992-5
9993-2
9994 -9
9995-5
9996-6
9997-7
9998-7
Es gibt Registerkarten in Position randoms, manchmal die letzte Ziffer der Schlüssel eliminiert, und es gibt 139.113, etc, dass ich keine Ahnung, woher sie kommen. Ich verwende gcc Version 5.4.0 (GCC) und kompiliere es mit Windows 10 und dem Terminal babun.
Weitere Informationen:
BruteForceStringMatch die Häufigkeit des Schlüssels in einer Suche.
int BruteForceStringMatch(char key[4], char* a, int length){
int freq=0;
int k;
for (int j = 0; j < length -4; j++) {
k =0;
while(k <4 && key[k] == a[j+k])
k=k+1;
if(k == 4)
freq++;
}
return freq;
}
Ich bekomme eine aus einer Datei mit 5000 Ziffern.
FILE *inputfile;
char c;
int largo = 0;
char *a = (char *)malloc(50000*sizeof(char *));;
char *b = (char *)malloc(50000*sizeof(char *));;
inputfile = fopen("archivo_1.tex", "r");
if (inputfile == NULL) {
fprintf(stderr, "Failed to open the file.\n");
exit(1);
}
if (inputfile) {
for (int i=0; (c = getc(inputfile)) != EOF; i++){
a[i] = c;
//putchar(a[i]);
largo++;
}
fclose(inputfile);
}
Wir brauchen genug Code, um das Problem zu replizieren. –
Können Sie auch die Definition von 'BruteForceStringMatch' veröffentlichen? –
Bitte poste ein [mcve]. – kaylum