#define DELIMS "!\"#$%&()|'*+,?/:;<=>@[\092]^_{}~\177"
void getFileLine(FILE *fp)
{
char *word, *ptr;
int tokennum, count;
char buffer[100];
while(!feof(fp))
{
(fgets(buffer, 100, fp));
ptr = buffer;
for(tokennum = 1; word = strtok(ptr, DELIMS);ptr = NULL, tokennum++)
{
word = strtok(ptr, DELIMS);
printf("%s\n", word);
}
}
}
Je passe donc un fichier contenant un exemple de programme. Mon travail consiste à enlever quelques delims et à passer chaque mot du code dans un arbre.Problèmes de manipulation de Strtok et String
Même si je ne suis pas dans la partie arborescente et que je ne fais que travailler sur la manipulation des cordes comme je le souhaite, j'ai quelques problèmes. Donc, en lisant les lignes du fichier .txt
, je reçois une partie de ce que je veux. Les deux premières lignes du .txt
est la suivante:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FLUSH while(getchar()!= '\n')
Maintenant, après son exécution par mon code, il le transforme en:
include
include
include
include
define FLUSH while
Les mots "
et <>
sont supprimés car les sont quelques-uns des delims. Le problème que j'ai est à la partie define FLUSH while
. Lorsqu'une ligne comme plus d'un mot qui n'est pas delim, je veux chaque mot à afficher séparément, ce qui rend la sortie:
include
include
include
include
define
FLUSH
while
Comme vous pouvez le voir, le define FLUSH while
a maintenant chaque mot sur une ligne distincte.
Je pensais que faire ptr=NULL
amènerait le strtok
à réutiliser la ligne jusqu'à la fin, mais encore une fois j'ai un peu de mal à le faire. Tout conseil/aide serait génial. Merci.
Que définit '' '' DELIMS''' comme? –
@TomCarpenter désolé à ce sujet, ajouté au code. – Bryan
Vous savez que ['strtok'] (http://en.cppreference.com/w/c/string/byte/strtok) utilise' NULL' pour que le premier paramètre continue de marquer le tampon courant (dans votre cas, chaque ligne lue), non? – WhozCraig