Einzelne Wörter auslesen

C_Boy

Mitglied
allo,

in eine Text-Datei steht z.B drinnen:
C++:
void main()
{
int i;
for ( i = 0 ; i< 5 ; i++)
{
printf("%d\n");
}
}


und ich will die printfs suchen und dann zählen wie viel sich in dieser Text-Datei befinden.

Das ganze dient als Übung zum C-Programmieren. Bitte keine vorgefertigten Biblos verwenden: string.h(strcmp etc.) usw. dürfen wir nicht.
nur stdio.h, stdlib.h, time.h für srand und so.

Also wie soll ich das anstellen vielleicht mal das ganze in ne while packen und ein character-array oder nen character auslesen:

C++:
while(!feof(text))
{
fscanf(text,"%s\n",tmp);
if(tmp[0]=='p'&& tmp[1]=='r' usw. bis halt zum 'f')
{
anzahl++;
}
}


Könnte man das so machen?
Tipps geben bitte.

MfG C_boy
 
Hi

du musst also eine Datei ohne string.h nach einem Wort durchsuchen
sind es immer einzelne Wörter?
Mehrere würden das Ganze verkomplizieren (Zeilenumbrüche etc dazwischen...)

Wenn immer einzeln:
Eine Möglichkeit wäre, wie du schon sagst, zeilenweise einlesen und durchsuchen.
Aber nicht mit fscanf (Whitespaceproblem), sondern mit fgets.

Dein Durchsuchen hat auch ein Problem: Es findet nur, wenn das gesuchte Wort am Zeilenanfang ist.
Mach eine Schleife von 0 bis (Zeilenlänge-Gesuchtlänge), und darin für jeden Buchstaben eine
Schleife, die die folgenden Buchstaben überprüft, ob sie mit dem gesuchten Wort übereinstimmen.
Wenn einer nicht stimmt, die innere Schleife abbrechen. Wenn sie bis zum Ende kommt: anzahl++

Es würde auch andere Möglichkeiten geben, bei denen du zT. immer nur einen Buchstaben der Datei einlesen musst
und so eventuell Speicher sparst (dafür gibts dann wieder andere Variablen, die vielleicht mehr brauchen). Aber so passt das auch schon.

Gruß
 
Hi
Dein Durchsuchen hat auch ein Problem: Es findet nur, wenn das gesuchte Wort am Zeilenanfang ist.
Mach eine Schleife von 0 bis (Zeilenlänge-Gesuchtlänge), und darin für jeden Buchstaben eine
Schleife, die die folgenden Buchstaben überprüft, ob sie mit dem gesuchten Wort übereinstimmen.
Wenn einer nicht stimmt, die innere Schleife abbrechen. Wenn sie bis zum Ende kommt: anzahl++

Könntest du mir mal die for bitte anschreiben vielleicht hilfts mir dann weiter.
 
C++:
int mystrlen(char *x)
{
    int i = 0;
    while(*(x++)) i++;
    return i;
}
mystrlen deshalb, weil ja kein string.h verwendet werden darf.

C++:
//char-Arrays: zeile und gesucht
//andere vars: int i, j, k, l und anzahl für die Gefundene Anzahl
...
//am Anfang irgendwo:
l = mystrlen(gesucht);
...
//für jede zeile:
j = mystrlen(zeile) - l;
for(i = 0; i < j; i++)
{
    k = 0;
    while(gesucht[k] == zeile[i + k] && gesucht[k]) k++;
    if(k == l) anzahl++;
}
Ungetestet.

Gruß
 
Zuletzt bearbeitet:
Zurück