在分隔符长度超过一个字符的情况下,C中是否有方法来拆分字符串(使用strtok
或任何其他方式)?我在寻找这样的事情:有没有办法在C中分割多个字符的字符串?
char a[14] = "Hello,World!";
char *b[2];
b[0] = strtok(a, ", ");
b[1] = strtok(NULL, ", ");
我想这是因为逗号之间没有空格和W.有没有办法做到这不拆分字符串?
在分隔符长度超过一个字符的情况下,C中是否有方法来拆分字符串(使用strtok
或任何其他方式)?我在寻找这样的事情:有没有办法在C中分割多个字符的字符串?
char a[14] = "Hello,World!";
char *b[2];
b[0] = strtok(a, ", ");
b[1] = strtok(NULL, ", ");
我想这是因为逗号之间没有空格和W.有没有办法做到这不拆分字符串?
您只需重复呼叫substr
即可查找边界字符串的出现情况并沿结果分割。找到结果后,按子串的长度前进指针并再次搜索。
您可以使用char * strstr(const char *haystack, const char *needle)
在您的字符串中找到您的分隔符字符串。
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);
虽然在第一个分隔符之前不会给你任何东西(包括在“Hello,World!”的情况下根本不会给你任何东西) –
Thanks Brian。Fixed。 –
-1如果strstr返回NULL,你将增加NULL;'char * b [2] =“,”'是错误,正确的是'char b [] =“,”;'或'const char * b =“,”;' – user411313
也许这样的事情?没有保证,这编译。 ;)
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;
}
它只有C99代码 – user411313
是C还是C++? – Jason
如果你包含'',它就是C,如果你说'std :: substr'并且包含'',它就是C++,尽管在C++中你不会使用字符串的裸指针。 –
@Kerrek:取决于你在做什么。裸字符指针对非常适合解析内存映射文本文件,而不需要数据副本或分配。当然,你把它们包装在一个不错的课堂中。 –