本文介绍了如何使用的strtok()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在写一个C程序来研究的strtok()的用法的用法。这里是我的code:
#包括LT&;&stdio.h中GT;
#包括LT&;&string.h中GT;主要()
{
ABC的char [100] =LS&安培;;
字符* TOK; TOK = strtok的(美国广播公司,);
而(托克!= NULL)
{
的printf(%S,TOK);
TOK =的strtok(NULL,);
}
的printf(\\ n \\ n \\ n \\ n \\ n%S,TOK);
返回0;
}
据打印的输出如下:
LS&安培;
(空值)
但我想它来打印'和;'在第二个printf语句。我该怎么做?我需要这部分对我的家庭作业项目。谁能帮我?
感谢你在前进! :)
解决方案
- 确保你能识别的极限打印什么,当你打印。
- 在打印的消息的末尾输出换行;如果你这样做的信息是更可能出现及时。
- 请不要打印空指针作为字符串;
的printf不是所有版本()
会表现很好 - 他们中的一些核心转储
code:
的#include<&stdio.h中GT;
#包括LT&;&string.h中GT;INT主要(无效)
{
ABC的char [] =LS&安培;;
字符* TOK;
字符* PTR = ABC; 而((TOK =的strtok(PTR,))!= NULL)
{
的printf(<<%S>> \\ N,TOK);
PTR = NULL;
}
返回0;
}
或(优化,):
的#include<&stdio.h中GT;
#包括LT&;&string.h中GT;INT主要(无效)
{
ABC的char [] =LS&安培;;
字符* TOK = ABC; 而((TOK = strtok的(TOK))!= NULL)
{
的printf(<<%S>> \\ N,TOK);
托克= NULL;
}
返回0;
}
输出:
<< LS>>
<<&安培;>>
您可以选择自己的标记字符,但不能与XML或HTML搞乱,我找了双尖括号作业相当不错的。
您还可以使用循环结构在写第二个呼叫的成本的strtok()
(这是最低的成本,但可能会被认为违反了DRY原则:不要重复自己):
的#include<&stdio.h中GT;
#包括LT&;&string.h中GT;INT主要(无效)
{
ABC的char [] =LS&安培;;
字符* TOK = strtok的(美国广播公司,); 而(托克!= NULL)
{
的printf(<<%S>> \\ N,TOK);
TOK =的strtok(NULL,);
}
返回0;
}
相同的输出。
修订要求
Yes, there is usually a way to do almost anything. This seems to work. It also works sanely if there are more tokens to parse, or if there's only the &
to parse, or if there are no tokens. Clearly, the body of the outer loop could be made into a function if you so wished; it would be sensible to do so, even.
#include <stdio.h>
#include <string.h>
int main(void)
{
char tests[][16] =
{
"ls -l -s &",
"ls &",
"&",
" ",
""
};
for (size_t i = 0; i < sizeof(tests)/sizeof(tests[0]); i++)
{
printf("Initially: <<%s>>\n", tests[i]);
char *tok1 = strtok(tests[i], " ");
char *tok;
while ((tok = strtok(NULL, " ")) != NULL)
{
printf("Loop body: <<%s>>\n", tok1);
tok1 = tok;
}
if (tok1 != NULL)
printf("Post loop: <<%s>>\n", tok1);
}
return 0;
}
Output:
Initially: <<ls -l -s &>>
Loop body: <<ls>>
Loop body: <<-l>>
Loop body: <<-s>>
Post loop: <<&>>
Initially: <<ls &>>
Loop body: <<ls>>
Post loop: <<&>>
Initially: <<&>>
Post loop: <<&>>
Initially: << >>
Initially: <<>>
Note how the markers pay for themselves in the last two examples. You couldn't tell those apart without the markers.
这篇关于如何使用的strtok()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!