#define DELIMS "!"#$%&()|'*+,?/:;@[ 92]^_{}~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("%sn", 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("%sn", word); }
这相当于:
while(word = strtok(ptr, DELIMS)) { word = strtok(ptr, DELIMS); printf("%sn", word); ptr = NULL; }
注意你在每次迭代中如何调用strtok
两次,但只打印一次? 这意味着您将丢失所有其他令牌。
此外,你没有添加 (空格)到您的令牌列表,因此它不会在空格上分割。
以上就是c/c++开发分享Strtok和String操作问题相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519820.html