Ich komm nämlich von selbst nicht drauf.

LG
Was dahinter steht ist Müll und uninteressant. Du prüfst jedoch trotzdem alle 150 Zeichen des Arrays. Im ersten Durchlauf steht noch Speichermüll im Array, also wird die Anzahl der gefundenen Worte noch stimmen. Jetzt kommt der zweite Schleifendurchlauf. Du überschreibst den Anfang deines Arrays mit folgender Zeichenkette:Doch im Semifinale von Roland Garros verliert Melzer schließlich.\0
Doch jetzt steht dahinter kein Speichermüll mehr, sondern der Rest der ersten Zeile, den du nicht überschrieben hast:Platz 3: Federer passt auf.\0
(Ich hab die Zeichen jetzt nicht gezählt, aber im Prinzip siehts so aus.)Platz 3: Federer passt auf.\0Garros verliert Melzer schließlich.\0
Code: Alles auswählen
#include <stdio.h>
int main(void)
{
FILE *file; // Dateizeiger
int count = 0; // Anzahl der bereits gezählten Wörter
int state; // Zustand des Automaten
int c; // eingelesener Buchstabe
// Datei öffnen und überprüfen
file = fopen( "text.txt", "r" );
if ( file == NULL )
{
printf( "Fehler beim Öffnen der Datei\n" );
return -1;
}
// Datei auslesen (der Schleifenkopf ist nicht sehr anfängerfreundlich, sollte aber verständlich sein)
while ( ( c = fgetc( file ) ) != EOF )
{
if ( state == 0 && c == 'v' )
state = 1;
else if ( state == 1 && c == 'e' )
state = 2;
else if ( state == 2 && c == 'r' )
state = 3;
else if ( state == 3 && c == 'l' )
state = 4;
else if ( state == 4 && c == 'i' )
state = 5;
else if ( state == 5 && c == 'e' )
state = 6;
else if ( state == 6 && c == 'r' )
state = 7;
else if ( state == 7 && c == 't' )
{
state = 0;
++count;
}
else
state = 0;
}
// Datei schließen
fclose( file );
// Ausgabe
printf( "%d\n", count );
// Programm beenden
return 0;
}
Code: Alles auswählen
const char *const word = "verliert"; // gesuchtes Wort
int state = 0; // aktueller Status, Index von "word"
while ( ( c = fgetc( file ) ) != EOF )
{
if(c == word[state]) // passender Buchstabe
{
state++; // nach nächstem Buchstaben suchen
if(word[state] == '\0') // Wort wurde komplett gefunden
{
count++; // Anzahl der Vorkommnisse erhöhen
state = 0; // wieder den Anfang des Wortes suchen
}
}
else // falscher Buchstabe
state = 0; // wieder den Anfang des Wortes suchen
}
Das habe ich ja in meinem letzten Satz auch gesagt, aber man muss ja nicht gleich alles vorsagen.dani93 hat geschrieben:Das mit den ganzen if's kann man doch deutlich schöner lösen...