Strtok和String操作问题
#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); } } }
所以我传入的文件中有一个示例程序。 我的工作是删除一些delims并将代码中的每个单词传递到树中。
虽然我不在树的一部分,只是努力让字符串按照我想要的方式进行操作,但我遇到了一些问题。
所以,当我从.txt
文件中读取.txt
,我正在获得我想要的部分内容。 .txt
的前几行如下:
#include "stdafx.h" #include #include #include #define FLUSH while( getchar()!= '\n')
现在,在它运行我的代码后,它将其变为:
include include include include define FLUSH while
"
和中的单词被删除,因为它们是一些delim。我遇到的问题是
define FLUSH while
部分。当一行作为多个单词而不是delim时,我希望每个单词都是单独显示,输出:
include include include include define FLUSH while
如您所见, define FLUSH while
现在将每个单词放在一个单独的行上。
我认为使ptr=NULL
会导致strtok
重用该行直到它到达终点,但我再次遇到一些麻烦。 任何建议/帮助都会很棒。 谢谢。
问题是您定义for循环的方式:
以下是代码的简化代码段:
for (; word = strtok(ptr, DELIMS);ptr = NULL) { word = strtok(ptr, DELIMS); printf("%s\n", word); }
这相当于:
while(word = strtok(ptr, DELIMS)) { word = strtok(ptr, DELIMS); printf("%s\n", word); ptr = NULL; }
注意你在每次迭代中如何调用strtok
两次,但只打印一次? 这意味着您将丢失所有其他令牌。
此外,你没有添加 (空格)到您的令牌列表,因此它不会在空格上分割。