2011-08-09 52 views
1

我的字符串分析是這樣的:串strtok_r

abcd "efgh [data\]" pqrl 12fgd] 

我想分析直到「]」,這是不是一個反斜槓「\」

我可以用strtok_r做着手?如果不是,我應該怎麼做?

+0

哪裏是所有的愚蠢 「你嘗試過什麼」 的評論? –

回答

2

沒有一個鏡頭的方法來執行此操作使用strtok_r。由於您的分隔符是單個字符,因此如果由strtok_r返回的標記的最後一個字符爲'\',則可以通過填充分隔符來始終重建所需的字符串。

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char str[] = "abcd \"efgh [data\\]\" pqrl 12fgd]"; 
    char *tokens[2] = {0}; 
    char *pToken = str; 
    unsigned int i = 0; 

    for(tokens[i] = strtok_r(str, "]", &pToken); ++i < 2; 
    tokens[i] = strtok_r(NULL, "]", &pToken)) { 
    } 

    for(i = 0; i < 2; ++i) { 
    printf("token %d = %s\n", i, tokens[i]); 
    } 

    for(i = 0; i < 2; ++i) { 
    if(tokens[i][strlen(tokens[i]) - 1] == '\\') { 
     tokens[i][strlen(tokens[i])] = ']'; 
    } 
    } 

    printf("output = %s\n", str); 

    return 0; 
} 

此輸出:

token 0 = abcd "efgh [data\ 
token 1 = " pqrl 12fgd 
output = abcd "efgh [data\]" pqrl 12fgd 
+0

感謝這個例子。 – hari

1

strtok搜索要搜索的集合中的任何單個字符。你可以分開],然後檢查哪些是前面的\但你不能用它搜索正則表達式。

3

您可以使用strchr。下面是我想嘗試做(未經測試):

p = str; 
while ((p = strchr(p, ']')) { 
    if (p > str && *(p-1) != '\') 
     /* This is it. */