C 使用特定的多字节分隔符标记字符串
我需要解析如下字符串:C 使用特定的多字节分隔符标记字符串,c,string,token,strtok,C,String,Token,Strtok,我需要解析如下字符串: 链接:a链接:闪烁:c链接:d lkjh 输出应为a,闪烁:c,d 但是使用strtok的输出可以理解为a,b,c,d,jh 如何确保仅link:显式拆分字符串(避免blink:c拆分的情况)。 另外,如何确保最后一个kjh不会出现(这里k似乎是分隔符)。首先,将分隔符字符串传递给strtok并不会像您所想的那样。如果传递“链接:”作为delim字段,它将使用这些字符中的任何一个作为分隔符。这就是拆分lkjh并返回jh的原因 最好按空格分隔,然后检查开头的匹配项“链接:”
链接:a链接:闪烁:c链接:d lkjh
输出应为a
,闪烁:c
,d
但是使用strtok的输出可以理解为a
,b
,c
,d
,jh
如何确保仅link:
显式拆分字符串(避免blink:c
拆分的情况)。
另外,如何确保最后一个
kjh
不会出现(这里k似乎是分隔符)。首先,将分隔符字符串传递给strtok
并不会像您所想的那样。如果传递“链接:”
作为delim
字段,它将使用这些字符中的任何一个作为分隔符。这就是拆分lkjh
并返回jh
的原因
最好按空格分隔,然后检查开头的匹配项“链接:
”
如果您需要比这更复杂的内容,请滚动您自己的或使用正则表达式。首先,将分隔符字符串传递给strtok并不会像您所想的那样。如果传递
“链接:”
作为delim
字段,它将使用这些字符中的任何一个作为分隔符。这就是拆分lkjh
并返回jh
的原因
最好按空格分隔,然后检查开头的匹配项“链接:
”
如果您需要比这更复杂的内容,请使用您自己的或使用正则表达式。回答我自己的问题 基本上找到第一个链接:然后继续前进,直到下一个空格/null,并在剩余的字符串上重复 更好的方法是简单地使用strstr:-
char* parseSubFn(char *string)
{
}回答我自己的问题 基本上找到第一个链接:然后继续前进,直到下一个空格/null,并在剩余的字符串上重复 更好的方法是简单地使用strstr:-
char* parseSubFn(char *string)
{
}在我看来,输入可能需要解析为“link:b link:c”,而不是“blink:c”。你确定你的要求吗?至少你的要求不清楚。如果你想,只需
link:
拆分字符串,那么link:b
anlink:c
将是并且应该是两个不同的标记。另一方面,如果你想要`link:`(带前导空格)若要拆分字符串,则第一个标记将是link:a
,因为它缺少前导空格。您可能应该澄清您真正想要的是什么。@kaylum,我确定,它需要输出“blink:c”@Dolda2000,我想我清楚我想要什么。我想生成一个以第一个“link:在下一个空空格之前,我认为输入可能需要解析为“link:b link:c”,而不是“blink:c”。你确定你的要求吗?至少你的要求不清楚。如果你想,只需link:
拆分字符串,那么link:b
anlink:c
将是并且应该是两个不同的标记。另一方面,如果你想要`link:`(带前导空格)若要拆分字符串,则第一个标记将是link:a
,因为它缺少前导空格。您可能应该澄清您真正想要的是什么。@kaylum,我确定,它需要输出“blink:c”@Dolda2000,我想我清楚我想要什么。我想生成一个以第一个“link:在下一个空空格之前,为什么要打印printf(“%s\n”,token+len\u前缀)?我不理解将此连接起来的必要性。我理解的是,您已经获得了空间分割标记,现在正在比较前5个字符是否等于link:,然后尝试打印其剩余部分..对吗?对。前缀后面的字符串的剩余部分开始于标记+len_前缀
。这是正确的s指针算术,而不是串联。你可以用它做任何你想做的事。把它复制到某个地方或任何地方。在这种情况下,我只是把它打印到标准输出。嗨,你为什么要打印printf(“%s\n”,token+len\u前缀)?我不理解将此连接起来的必要性。我理解的是,您已经获得了空间分割标记,现在正在比较前5个字符是否等于link:,然后尝试打印其剩余部分..对吗?对。前缀后面的字符串的剩余部分开始于标记+len_前缀
。这是正确的s指针算法,不是串联。你可以用它做任何你想做的事情。把它复制到某个地方或任何地方。在这种情况下,我只是把它打印到标准输出。
if(string==NULL || *string=='\0')
return;
else{
//printf("Parsing on %s \n",string);
const char* needle = "link:";
char ret[128];//large buffer character for return token
char *location=strstr(string,needle);
char *start=location+5;
int i=0;
while(*start!='\0' && *start!='\n' && *start!=' ')
{
ret[i]=*start;
start++;i++;
}
start++;
printf("%s\n",ret);
parseSubFn(start);
}