#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);
}
}
}
Итак, я передаю файл, в котором есть образец программы. Моя задача - удалить некоторые разделители и передать каждое слово из кода в дерево.Проблемы с манипуляциями Strtok и String
Хотя я не на части дерева и просто работаю над тем, чтобы заставить струны манипулировать так, как я хочу, у меня возникают некоторые проблемы.
Итак, когда я прочитал строки из файла .txt
, я получаю часть того, что хочу. Первая пара строк из .txt
выглядит следующим образом:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FLUSH while(getchar()!= '\n')
Теперь, после того, как она проходит через мой код, он превращает ее в
include
include
include
include
define FLUSH while
Слова в "
и <>
удаляется, так как те, это несколько из делимов. Проблема, которую я испытываю, находится в части define FLUSH while
. Когда строка в более чем одно слово, которое не является DELIM, я хочу, каждое слово, которое будет отображаться отдельно, делая вывод:
include
include
include
include
define
FLUSH
while
Как вы можете видеть, define FLUSH while
теперь каждое слово на отдельной строке.
Я думал, что создание ptr=NULL
приведет к тому, что strtok
будет использовать линию до тех пор, пока она не дойдет до конца, но снова у меня возникли проблемы с этим. Любые советы/помощь будут замечательными. Благодарю.
Что такое '' 'DELIMS''' как? –
@TomCarpenter сожалеет об этом, добавлен в код. – Bryan
Вы знаете, что ['strtok'] (http://en.cppreference.com/w/c/string/byte/strtok) использует' NULL', чтобы первый параметр продолжал токенизировать текущий буфер (в вашем случай, каждая строка читается), правильно? – WhozCraig