在C语言中使用多个分隔符进行解析
在C语言中,解析带有多个分隔符的字符串的最佳方法是什么?假设我有一个字符串在C语言中使用多个分隔符进行解析,c,string,parsing,delimiter,C,String,Parsing,Delimiter,在C语言中,解析带有多个分隔符的字符串的最佳方法是什么?假设我有一个字符串a,B,C*D,并想存储这些值。我不知道如何优雅地处理*,除了存储最后一个字符串C*D,然后用*分隔符分别解析 如果它只是A,B,C,*D,我会使用strtok()忽略*D的第一个索引,只得到D,但是*之前没有逗号,所以我不知道*即将到来。你可以对strtok使用多个分隔符,第二个参数是一个包含分隔符列表的C字符串,不仅仅是一个分隔符: #include <stdio.h> #include <strin
a,B,C*D
,并想存储这些值。我不知道如何优雅地处理*
,除了存储最后一个字符串C*D
,然后用*
分隔符分别解析
如果它只是A,B,C,*D
,我会使用strtok()忽略*D
的第一个索引,只得到D,但是*
之前没有逗号,所以我不知道*
即将到来。你可以对strtok
使用多个分隔符,第二个参数是一个包含分隔符列表的C字符串,不仅仅是一个分隔符:
#include <stdio.h>
#include <string.h>
int main (void) {
char myStr[] = "A,B,C*D";
char *pChr = strtok (myStr, ",*");
while (pChr != NULL) {
printf ("%s ", pChr);
pChr = strtok (NULL, ",*");
}
putchar ('\n');
return 0;
}
代码可以将strtok()与包含分隔符的字符串中的分隔符列表一起使用。也就是说,if(NULL!=(pResult=strtok(targetString,“,”))和对于连续标记:if(NULL!=strtok(NULL,“,”))但是,请注意,当连续分隔符没有中间字符时,strtok()不会在每个分隔符上停止。也就是说,对于“,”将不会在“”上停止,请确保字符串为nul字节terminated@user3629249,如果它没有终止,它实际上不是一个字符串:-)我不理解你的解决方案,如果你认为我为什么告诉你:倍数分隔符是如果你在一段时间内使用三个或更多的“strtok”。。。。你的例子不能解决这个问题。@delive,我不确定我是否理解你想说的话。答案完全符合OP的要求。如果你有不同的问题,你应该把它当作不同的问题来问。
A B C D