Brute-Force-Algorithmus
Verfasst: Mi Jun 19, 2019 1:38 pm
Hallo zusammen,
Lerne C in diesem Buch: C von A bis Z von Jürgen Wolf. Bin bei Kapitel 22 angekommen beim Brute-Force-Algorithmus.
Hier ist der link: http://openbook.rheinwerk-verlag.de/c_v ... 66326bcc13
Ich glaube der Code ist fehlerhaft:
Suchstring ist "ex" und das Muster ist "a example text". Bei mir ist das Suchergebnis 0, aber es müsste größer als 0 sein. Hier die Ausgabe:
Lerne C in diesem Buch: C von A bis Z von Jürgen Wolf. Bin bei Kapitel 22 angekommen beim Brute-Force-Algorithmus.
Hier ist der link: http://openbook.rheinwerk-verlag.de/c_v ... 66326bcc13
Ich glaube der Code ist fehlerhaft:
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 255
#define MAX_DAT 10
#define MAX_LINE 4096
#define LINE "---------------------------------------\n"
struct datei
{
char name[LEN];
int gefunden;
};
typedef struct datei DATEI;
int BruteForce(char *muster, char *text)
{
int i = 0, j, cnt = 0;
int m = strlen(muster);
int n = strlen(text);
while(i <= n - m)
{
for(j = 0; j < m && muster[j] == text[i+j]; j++);
if(j == m)
{
printf("Pos. %3d, ", i);
cnt++;
}
i++;
}
return cnt;
}
int main(int argc, char *argv[])
{
DATEI suche[MAX_DAT];
char suchstring[LEN];
char read_line[MAX_LINE];
FILE *f;
int i, j, ret, zeile;
if(argc < 3)
{
fprintf(stderr, "Verwendung: %s suchstring datei1 <datei2> - <datei%d>\n", argv[0], MAX_DAT);
return EXIT_FAILURE;
}
strncpy(suchstring, argv[1], LEN);
for(i = 2, j = 0; j < MAX_DAT && i < argc; i++, j++)
{
strncpy(suche[j].name, argv[i], LEN);
suche[j].gefunden = 0;
}
for(i = 0; i < argc-2; i++)
{
f = fopen(suche[i].name, "r");
if(f == NULL)
{
perror(NULL);
continue;
}
zeile = 0;
printf("\nDatei \"%s\": \n", suche[i].name);
while(fgets(read_line, MAX_LINE, f) != NULL)
{
zeile++;
ret = BruteForce(suchstring, read_line);
if(ret != 0)
{
suche[i].gefunden += ret;
printf(" in Zeile %d\n", zeile);
ret = 0;
}
}
printf("Suchergebnisse in \"%s\": %d\n", suche[i].name, suche[i].gefunden);
printf(LINE);
fclose(f);
}
return EXIT_SUCCESS;
}