Wörter suchen und zählen in der Programmiersprache C
Hallo, Wir müssen als Aufgabe ein Programm in der Programmiersprache C schreiben, dass von einem Textdokument mit beliebigen Inhalt ein Bestimmtes Wort oder einen Bestimmten Buchstaben in einem Wort sucht und zählt wie viele gleiche Wörter bzw gleiche Buchstabenfolge hintereinander in diesem Textdokument sind. Ich habe da schon einen Anfang gemacht, der allerdings nur ein Wort in einer Zeile zählt und dann einfach in die nächste geht:
include <stdio.h> include <conio.h> include <string.h> include <stdlib.h> include <time.h>char *self_strstr(char *text,char *suche);
int main(int argc, char **argv) { //Variablen FILE *fp; char zeile[100], worte[100]; int n=0, i=0;
//Startet die Ticks
clock();
//Programmablauf
fp = fopen(argv[1], "rt");
while(fgets(zeile, sizeof(zeile), fp) != NULL)
if (self_strstr(zeile, argv[2]) != NULL)
n++;
fclose(fp);
//Ausgabe
printf("Anzahl des gesuchten Wortes: %d\n", n);
printf("Ticks: %d", clock());
return 0;
}
char *self_strstr(char *text, char *suche) { int i=0; int j=0; int suche_size; suche_size = strlen(suche); while(text[i] != '\0' && suche_size != 0) { if(text[i]==suche[j]) { suche_size--; j++; } else { suche_size = strlen(suche); j = 0; i=i-j; // hüpfe zum zu letzt Verglichenen Feld von String text } i++; } if (suche_size == 0) return i; else return NULL; }
ich hoffe ihr könnt mir bei helfen es weiterzuschreiben.
2 Antworten
Ein leichtes^^... in "foo.txt" paar Wörter reinschreiben und die needle Variable ist dann dein Suchbegriff. Hab ich jetzt mal auf die schnelle in Xcode erstellt....
#include <stdio.h>
include <string.h>
include <stdlib.h>
int main(int argc, const char * argv[]) {
const char * needle = "foo"; //Hiernach wird gesucht
char *s;
const char *start;
int count = 0;
FILE *fp;
ssize_t read;
char *line = NULL;
size_t len = 0;
fp = fopen("foo.txt", "r"); // Dein text file
if (fp == NULL) {
printf("I couldn't open file.\n");
exit(0);
}
while ((read = getline(&line, &len, fp)) != -1) {
start = line;
while ((s = strstr (start, needle))) {
start = s + strlen (needle);
count++;
}
}
fclose(fp);
printf("Anzahl treffer: %i", count);
return 0;
}
Ich würde zuerst mal die gesamte Datei in ein String-Array und dann in einen einzelnen String speichern...