Wie zum zählen der vorkommen eines bestimmten Strings in einer Textdatei mit C
Ich versuche herauszufinden, wie man zählt die Anzahl einer bestimmten Zeichenfolge "test" tritt in eine text-Datei mit der C-Programmierung. Ich will das das Programm zum anzeigen der letzten Zählung bei Abschluss.
Dies ist der code, den ich habe kommen mit, aber es scheint nicht zu tun, um den trick. Das zähle ich zu generieren ist etwas niedriger als das, was tatsächlich in der Textdatei.
Erkennt jemand, was ich falsch mache? Ich bin ziemlich neu in der C-Programmierung, so dass jede Einsicht würde sehr geschätzt werden!
#include<stdio.h>
#include<string.h>
int main()
{
FILE *ptr_file;
char buf[200];
char key[] = "test"; //the string I am searching for
int wordcount = 0;
ptr_file = fopen("input.txt","r"); //my input text file
while (fgets(buf,200, ptr_file)!=NULL)
{
if((strstr(buf,key)) !=NULL){
wordcount++;
}
}
fclose(ptr_file);
printf("%d",wordcount);
}
Nur zu sagen, der Algorithmus falsch ist, ist nicht hilfreich. Ich vermute, dass S. S. davon aus, dass strstr finden undelimited Streicher und das ist der Fehler.
Führende Fragen für mehr Korrektheit Fragen: was bedeutet Ihre Umsetzung tun, wenn der gesuchte text Auftritt, mehr als einmal in eine Zeile? Was passiert, wenn eine Zeile hat eine Länge von 200 Zeichen oder mehr?
Was passiert, wenn die Zeile enthält die Sequenz 'testestestest'? Was soll passieren?
beachten Sie, dass die Nachricht, die Sie geschrieben, ist eine Warnung, kein Fehler. Darüber hinaus (und sonstige Erklärungen) sollte bearbeitet werden, in Frage. Fragen sollten verständlich sein, ohne das Lesen der Kommentare. SO verwendet eine Q&A, nicht-forum-format. Sollte Ihr Programm eine Suche nach Wörtern (z.B. wäre es nicht mit "Test", "bezeugen" oder "Wettbewerber"), oder alle vorkommen des Teilstrings?
bitte noch einmal Bearbeiten Klarstellungen zu deiner Frage, anstatt Entsendung Sie als Kommentare. Kommentare sind nicht gut geeignet für die Diskussion.
Führende Fragen für mehr Korrektheit Fragen: was bedeutet Ihre Umsetzung tun, wenn der gesuchte text Auftritt, mehr als einmal in eine Zeile? Was passiert, wenn eine Zeile hat eine Länge von 200 Zeichen oder mehr?
Was passiert, wenn die Zeile enthält die Sequenz 'testestestest'? Was soll passieren?
beachten Sie, dass die Nachricht, die Sie geschrieben, ist eine Warnung, kein Fehler. Darüber hinaus (und sonstige Erklärungen) sollte bearbeitet werden, in Frage. Fragen sollten verständlich sein, ohne das Lesen der Kommentare. SO verwendet eine Q&A, nicht-forum-format. Sollte Ihr Programm eine Suche nach Wörtern (z.B. wäre es nicht mit "Test", "bezeugen" oder "Wettbewerber"), oder alle vorkommen des Teilstrings?
bitte noch einmal Bearbeiten Klarstellungen zu deiner Frage, anstatt Entsendung Sie als Kommentare. Kommentare sind nicht gut geeignet für die Diskussion.
InformationsquelleAutor sheebs | 2011-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
strstr
ist definiert in der string.h header. Wenn Sie keine Zeichenfolge.hstrstr
ist schwarzarbeit in der Quell-Datei und es windet sich implizit deklariert int zurückgeben und nehmen unspezifische Argumente (das heißt, es ist, als wenn Sie deklariert wurdenint strstr()
). Dies kann problematisch sein, wenn die Objekt-Datei für Ihr Programm ist mit der standard-C-Bibliothek durch die potential-Funktion Signatur Abweichungen, daher die Warnung.Die Lösung ist einfach: stellen Sie sicher, Sie include string.h.
Als für das problem mehrerer vorkommen einer Suchzeichenfolge in einer Linie, beachten Sie den ersten Absatz im Abschnitt Beschreibung der
strstr
man-page:Während Sie verwenden können
strstr
mehrere Teilzeichenfolgen ist, werden Sie brauchen, um eine Schleife über den string, mit einem anderen Start-Position jedes mal. Je nachdem, wo Sie beginnen, es könnte mit zuvor abgestimmten Teile des Strings (z.B. "testest es" würde zählen als 2 Treffer), oder nur gegen unübertroffene Teile (z.B. "testest es" würde zählen als 1).Wenn Sie möchten, zählen der vorkommen eines kompletten Wortes und nicht nur eine Teilfolge, die
strstr
ist nicht sehr nützlich. Eine Möglichkeit ist die Verwendungstrpbrk
oderstrcspn
zu finden, Wort (d.h. Buchstaben) Zeichen undstrspn
zu finden, nicht-Wort-Zeichen. Mit diesen, können Sie die ersten Zeichen eines Wortes vergleichen, um das Suchmuster und, wenn es passt, testen Sie, dass das nächste Zeichen ist kein Buchstabe. Falls nicht, erhöht die Anzahl; wenn es ist, gehen Sie zum nächsten Wort. Alternativ können Sie die Schleife über jedes Zeichen, und verwenden Sieisalpha
zu unterscheiden, Briefe von nicht-Buchstaben (also Anfänge und Endungen der Wörter).Eine weitere option ist das aufteilen der Eingabe in eine Liste von Wörtern, und Scannen Sie dann die word-Liste für Ihr suchwort. String tokenisierung Funktionen wird dies tun, wenn Sie eine änderung der Puffer, den Sie übergeben. Sie können auch
fscanf
zu Lesen, ein Wort zu einer Zeit aus der Datei. Dies hat den zusätzlichen Vorteil, dass der richtig Umgang mit langen Linien.Es ist nicht implizit deklariert keine Argumente; es ist implizit deklariert, um eine Undefinierte Argumente.
InformationsquelleAutor outis
Froh zu hören, dass.
Code kann funktionieren, aber es ist sicher eine Reise down memory lane 1980, oder so ungefähr.
Sie Lagen gut in der Zeit Reisen !
Wenn Sie sagten, über das SPRINGEN, es wird nur die OBERE SCHLEIFE BREAK und CONTINUE.
InformationsquelleAutor BLUEPIXY