Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中使用多个分隔符进行解析_C_String_Parsing_Delimiter - Fatal编程技术网

在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

在C语言中,解析带有多个分隔符的字符串的最佳方法是什么?假设我有一个字符串
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