Bitte um Hilfe!!!
-
@RBS2 Mhm. Und dabei zerstückelst mit gut glück das gesuchte wort. Komm. Troll dich.
-
@Swordfish sagte in Bitte um Hilfe!!!:
Und dabei zerstückelst mit gut glück das gesuchte wort.
wenn das letzte zeichen des buffers kein whitespace ist, kopierst du die zeichen zwischen dem letzten whitespace und buffer-ende nach vorn (memcpy) und füllst den rest des buffers mit dem nächsten fgets()-call auf. dann kannste wieder strtok machen.
das mag für dich vielleicht zu kompliziert sein, ist aber recht einfach. besser jedenfalls, als irgendwelche malloc-realloc-free-orgien.
buffer-größe? nimm 1024. so lange wörter schreibt kein mensch.
-
oder die fscanf-variante, kurz und knackig:
void read_words (FILE *f) { char x[1024]; while (fscanf(f, " %1023s", x) == 1) { puts(x); } }
gesehen auf stackoverflow.com.
hat hoffentlich keinen overflow.
-
@RBS2 sagte in Bitte um Hilfe!!!:
das mag für dich vielleicht zu kompliziert sein, ist aber recht einfach. besser jedenfalls, als irgendwelche malloc-realloc-free-orgien.
Du findest also
strtok()
- und Herumkopierorgien besser als von Anfang an das zu lesen, was man braucht. Ja ne, klingt logisch ^^@RBS2 sagte in Bitte um Hilfe!!!:
oder die fscanf-variante
... ist genau was ich mache. Nur eben mit passender Puffergröße.
-
@Wade1234 ok vielen dank ich melde mich für weitere Probleme falls ich auf welche zustöße
-
@Swordfish sagte in Bitte um Hilfe!!!:
... ist genau was ich mache.
Bloß brauchst du fast 100 Zeilen dafür.
-
@RBS2 Mein Physikprof hat immer gesagt: "Schreibarbeit ist keine Arbeit.". Für
format
ginge auch eine feste Größe ... dann sinds schon mal ~20 Zeilen weniger.Zeig doch deine tolle Variante ...
-
@Swordfish sagte in Bitte um Hilfe!!!:
Zeig doch deine tolle Variante ...
Hier, knapp 30 Zeilen:
#include <stdio.h> #include <stdlib.h> #include <memory.h> #define STOP(x) {puts(x);exit(-1);} int main(int argc, char* argv[]) { if (argc != 3) STOP ("1st arg: file name, 2nd arg: needle"); FILE *fp = fopen (argv[1], "r"); if (fp == 0) STOP ("Can't open ..."); int n=0, found=0; char word[1024]; while (fscanf(fp, " %1023s", word) == 1) { n++; if (!strcmp (word, argv[2])) { found++; printf ("\'%s\' is at pos. %d\n", argv[2], n); } } printf ("Found \'%s\' %d times.\n", argv[2], found); }
Spuckt aus:
'Sachverwalter' is at pos. 1
'Sachverwalter' is at pos. 9
'Sachverwalter' is at pos. 10
Found 'Sachverwalter' 3 times.beim Input:
Sachverwalter
hallo das is ein text mustermann
muster
Sachverwalter Sachverwalter
pluster
-
@RBS2 Ein Makro, really??
@RBS2 sagte in Bitte um Hilfe!!!:
exit(-1);
Mhm.
EXIT_FAILURE
ftw.Was soll das
n
? Das hat doch keine relation zu der Position in der Datei.
-
@Swordfish sagte in Bitte um Hilfe!!!:
@RBS2 Ein Makro, really??
@RBS2 sagte in Bitte um Hilfe!!!:
exit(-1);
Mhm.
EXIT_FAILURE
ftw.Was soll das
n
? Das hat doch keine relation zu der Position in der Datei.n ist die Wortnummer.
Was hast du gegen Makros?