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_Split - Fatal编程技术网

有没有一种方法可以在C语言中拆分多个字符上的字符串?

有没有一种方法可以在C语言中拆分多个字符上的字符串?,c,string,split,C,String,Split,在C语言中,当分隔符的长度超过一个字符时,是否有方法拆分字符串(使用strtok或任何其他方法)?我在找这样的东西: char a[14] = "Hello,World!"; char *b[2]; b[0] = strtok(a, ", "); b[1] = strtok(NULL, ", "); 我不希望分割字符串,因为逗号和W之间没有空格。有没有办法做到这一点?您可以重复调用以查找边界字符串的出现处,然后沿结果分割。找到结果后,将指针向前移动子字符串的长度,然后再次搜索。您可以使用cha

在C语言中,当分隔符的长度超过一个字符时,是否有方法拆分字符串(使用
strtok
或任何其他方法)?我在找这样的东西:

char a[14] = "Hello,World!";
char *b[2];
b[0] = strtok(a, ", ");
b[1] = strtok(NULL, ", ");

我不希望分割字符串,因为逗号和W之间没有空格。有没有办法做到这一点?

您可以重复调用以查找边界字符串的出现处,然后沿结果分割。找到结果后,将指针向前移动子字符串的长度,然后再次搜索。

您可以使用
char*strstr(const char*haystack,const char*pinder)
在字符串中定位分隔符字符串

char a[14] = "Hello,World!";
char b[2] = ", ";
char *start = a;
char *delim;
do {
    delim = strstr(start, b);
    // string between start and delim (or end of string if delim is NULL).
    start = delim + 2; // Use lengthof your b string.
} while (delim);

也许是这样的?不保证这会编译。;)


如果你包含<代码> >代码>,它是C++,如果你说“代码> STD::子字符串”,并且包含 < /C> >,尽管C++中你不会用裸机指针来做字符串。@克雷克:取决于你在做什么。裸字符指针对非常适合解析内存映射的文本文件,而不需要数据拷贝或分配。当然,你可以将它们封装在一个很好的类中。但是在第一个分隔符之前,这不会给你任何东西(包括在“Hello,World!”的情况下什么也不给你-1如果strstr返回NULL,你将增加NULL;'char*b[2]=“,”是一个错误,正确的是'char b[]=”,“;'或'const char*b=“,”;@user411313:Fixed
char*b[]
,谢谢。但我看不出您第一点的问题。
delim
不是递增的,它保留为
NULL
,并允许退出循环。问题出在哪里?
char* strstrtok(char *haystack, char *needle) {
    static char *remaining = null;
    char *working;

    if(haystack)
         working = haystack;
    else if(remaining)
         working = remaining;
    else
         return NULL;

    char *result = working;
    if(result = strstr(working, needle))
        remaining = working + strlen(needle) + 1;

    return result;
}