C 如何使用strtok()
我正在编写一个C程序来研究函数C 如何使用strtok(),c,printf,token,strtok,C,Printf,Token,Strtok,我正在编写一个C程序来研究函数strtok()的用法。这是我的密码: #include <stdio.h> #include <string.h> main() { char abc[100] = "ls &"; char *tok; tok = strtok(abc, " "); while (tok != NULL) { printf("%s", tok); tok = strtok(NULL
strtok()
的用法。这是我的密码:
#include <stdio.h>
#include <string.h>
main() {
char abc[100] = "ls &";
char *tok;
tok = strtok(abc, " ");
while (tok != NULL) {
printf("%s", tok);
tok = strtok(NULL, " ");
}
printf("\n\n\n\n\n%s", tok);
return 0;
}
但是我希望它在第二个printf
语句中打印&
。我该怎么做?我的家庭作业需要这个部分
printf()
都能正常运行,其中一些版本会转储内核修订要求 我想在
之外添加printf()
语句,而在之外循环并打印“&
”。我需要它,因为我想稍后将它与程序中的另一个变量进行比较。有什么办法吗
是的,通常有一种方法可以做任何事情。这似乎奏效了。如果有更多的令牌要解析,或者只有&
要解析,或者没有令牌,它也可以正常工作。很明显,如果你愿意的话,外环的主体可以变成一个函数;即便如此,这样做也是明智的
#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;
}
#包括
#包括
内部主(空)
{
字符测试[][16]=
{
“ls-l-s&”,
“ls&”,
"&",
" ",
""
};
对于(size_t i=0;i
输出:
<<ls>>
<<&>>
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: <<>>
最初:
环体:
环体:
环体:
后循环:
最初:
环体:
后循环:
最初:
后循环:
最初:>
最初:
请注意,在最后两个示例中,标记是如何为自己付费的。如果没有记号笔,你就无法把它们区分开来。你应该这样写:
#include<stdio.h>
#include<string.h>
int main();
{
char string[] = "ls &"; //you should not write 100, cuz you waste memory
char *pointer;
pointer = strtok(string, " "); //skip only spaces
while(pointer != NULL)
{
printf("%s\n", pointer);
pointer = strtok(string, " ");
}
return 0;
}
#包括
#包括
int main();
{
char string[]=“ls&”;//您不应该写入100,因为这样会浪费内存
字符*指针;
指针=strtok(字符串,“”;//只跳过空格
while(指针!=NULL)
{
printf(“%s\n”,指针);
指针=strtok(字符串“”);
}
返回0;
}
你的while
循环一直持续到tok
为NULL
,对吗?因此,在第二个printf
语句中,tok
是NULL
。这令人惊讶吗?在第一个printf()中添加一个换行符,如果您需要有关strtok()
的帮助,您可以随时使用。@rici是的,它正在打印NULL。如何让它改为打印“&”@user2201650:您认为循环执行了多少次?您认为它第一次打印什么?我想在while循环外添加printf语句,并在while循环外打印“&”。我需要它,因为我想稍后将它与程序中的另一个变量进行比较。有什么办法吗?嗯,我想你能做到;大多数事情都可以做到。你确定值得吗?给我几分钟,让我想想。这不是…一个明显的要求…我们应该说。@JonathanLeffler或没有额外的变量和strtok@self。我只是看着你粘贴的代码;你说得对,它可以变得更光滑。我过去也曾这样做过;这次我忘了。在第一次调用strtok()
之后,必须使用NULL
作为第一个参数,以指示您在上一次调用停止的地方继续。此代码有缺陷,您应该将while循环中的strtok first值替换为NULL
#include <stdio.h>
#include <string.h>
int main(void)
{
char abc[] = "ls &";
char *tok = strtok(abc, " ");
while (tok != NULL)
{
printf("<<%s>>\n", tok);
tok = strtok(NULL, " ");
}
return 0;
}
#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;
}
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: <<>>
#include<stdio.h>
#include<string.h>
int main();
{
char string[] = "ls &"; //you should not write 100, cuz you waste memory
char *pointer;
pointer = strtok(string, " "); //skip only spaces
while(pointer != NULL)
{
printf("%s\n", pointer);
pointer = strtok(string, " ");
}
return 0;
}