gpt4 book ai didi

c - 嵌套 while 循环中的 strtok 行为异常

转载 作者:太空宇宙 更新时间:2023-11-04 06:16:22 25 4
gpt4 key购买 nike

<分区>

我有一个看起来像 1,3-5,7,9-11 的字符串,我要通过重复调用 strtok 来标记它,以便输出看起来像这样:

1
3
5
7
9
11

我的代码是这样的:

#include <stdio.h>
#include <string.h>

void tokenize(char *string){
char *token;
token = strtok (string,"-");
while (token != NULL) {
// ... do some other unrelated stuff ...
printf("\tToken %s\n", token);
token = strtok (NULL, ",");
}
}

int main (int argc,char **argv)
{
char *token;
token = strtok (*(argv+1),",");
while (token != NULL) {
if (strchr(token,45)){ //45 is ASCII for "-".
tokenize(token);
}
printf("Token1 %s \n", token);
token = strtok (NULL, ",");
}
return 0;
}

但是,当我运行代码时它过早结束并且我得到:

./tokenizer 1,3-5,7,9-11
Token1 1
Token 3
Token 5
Token1 3

但我希望/想要这样的东西:

./tokenizer 1,3-5,7,9-11
Token1 1
Token 3
Token 5
Token1 7
Token 9
Token 11

如果我注释掉读取 tokenize(temptoken); 的行(换句话说,仅在“,”上执行 strtok),那么输出看起来就像人们期望的那样:

./tokenizer 1,3-5,7,9-11
Token1 1
Token1 3-5
Token1 7
Token1 9-11

所以看起来问题确实出在对已经标记化的字符串的后续 strtok 调用上,所以我尝试将 memcpy 内存指向标记指针,但这并没有真正帮助:

#include <stdio.h>
#include <string.h>

void tokenize(char *string){
char *token;
token = strtok (string,"-");
while (token != NULL) {

printf("\tToken %s\n", token);
token = strtok (NULL, ",");
}
}

int main (int argc,char **argv)
{
char *token;
char *temptoken ;
token = strtok (*(argv+1),",");
while (token != NULL) {
if (strchr(token,45)){ //45 is ASCII for "-".
/* added memcpy */ memcpy(temptoken,token,strlen(token)+1);
tokenize(temptoken);
}
printf("Token1 %s \n", token);
token = strtok (NULL, ",");
}
return 0;
}


$ ./tokenizer 1,3-5,7,9-11
Token1 1
Token 3
Token 5
Token1 3-5

关于我可以做些什么来修复代码、理解我的误解所在并获得所需输出的任何想法?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com