Ich versuche momentan den Boyermoore Algorithmus auf beliebig große Textdateien anzuwenden. Dabei bin ich auf das Problem gestoßen, dass ich zwar das dynamische Array beschreiben kann, aber leider bei der Übergabe und der Weiterverarbeitung etwas schief läuft. Führe ich das Programm aus, stürz es direkt ab. (Wird mit Sicherheit an einem Pointer-Fehler liegen, allerdings kann ich ihn einfach nicht finden.
Vielen danke schonmal für die Hilfe! Hier einmal der Code.
Habt mitleid... Ich bin noch ein Frischling!
Im Anhang eine Beispieldatei. (kleinste vorhandene)
Vielen danke schonmal für die Hilfe! Hier einmal der Code.
Habt mitleid... Ich bin noch ein Frischling!
Im Anhang eine Beispieldatei. (kleinste vorhandene)
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void boyermoore();
int main(int argc, char *argv[])
{
FILE *f;
long long anzg, anzb;
char *gesucht, *block;
if (argc <= 1)
{
fprintf(stdout,"Parameter Dateiname fehlt\n");
return 1;
}
else
{
FILE* dateizeiger = fopen (argv[1], "r");
if (dateizeiger == NULL)
{
fprintf(stdout,"Fehler beim Oeffnen\n");
}
else
{
fscanf(dateizeiger, "%d", &anzg); //Anzahl Zeichen des gesuchten Wortes
gesucht = malloc(sizeof(char)*anzg + 1);
if(gesucht==NULL)
printf("Nicht genügend Speicher!\n");
fscanf(dateizeiger, "%s", gesucht);//einlesen: gesuchtes Wort
fscanf(dateizeiger, "%d", &anzb);//Anzahl Zeichen des Textes
block = malloc(sizeof(char)*anzb + 1);
if(block==NULL)
printf("Nicht genügend Speicher!\n");
fscanf(dateizeiger, "%s", block);//einlesen: Text
//printf("%s\n", block);
fclose(dateizeiger);
boyermoore(block, gesucht, anzb, anzg);
free(gesucht);
free(block);
}
system("PAUSE");
return 0;
}
}
void boyermoore(char block[], char gesucht[], int anzb, int anzg)
{
int i = 0, j, counter;
i=anzg-1;
j=anzg-1;
do
{
counter = 0;
if(gesucht[j] == block[i])
{
i--;
j--;
}else
{
while(gesucht[j] != block[i] && counter<=anzg)
{
counter++;
j--;
}
j = anzg-1;
i += counter;
}
if(j==0)
{
printf("%d\n", i);
i+=anzg;
j=anzg-1;
}
}while(i<=anzb-1);
}
Anhänge
Zuletzt bearbeitet: