2011-08-16 87 views
11

在分隔符長度超過一個字符的情況下,C中是否有方法來拆分字符串(使用strtok或任何其他方式)?我在尋找這樣的事情:有沒有辦法在C中分割多個字符的字符串?

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

我想這是因爲逗號之間沒有空格和W.有沒有辦法做到這不拆分字符串?

回答

8

您只需重複呼叫substr即可查找邊界字符串的出現情況並沿結果分割。找到結果後,按子串的長度前進指針並再次搜索。

+0

是C還是C++? – Jason

+2

如果你包含'',它就是C,如果你說'std :: substr'並且包含'',它就是C++,儘管在C++中你不會使用字符串的裸指針。 –

+0

@Kerrek:取決於你在做什麼。裸字符指針對非常適合解析內存映射文本文件,而不需要數據副本或分配。當然,你把它們包裝在一個不錯的課堂中。 –

4

您可以使用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); 
+0

雖然在第一個分隔符之前不會給你任何東西(包括在「Hello,World!」的情況下根本不會給你任何東西) –

+0

Thanks Brian。Fixed。 –

+1

-1如果strstr返回NULL,你將增加NULL;'char * b [2] =「,」'是錯誤,正確的是'char b [] =「,」;'或'const char * b =「,」;' – user411313

1

也許這樣的事情?沒有保證,這編譯。 ;)

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; 
} 
+0

它只有C99代碼 – user411313

相關問題