在分隔符長度超過一個字符的情況下,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:取決於你在做什麼。裸字符指針對非常適合解析內存映射文本文件,而不需要數據副本或分配。當然,你把它們包裝在一個不錯的課堂中。 –