2017-03-31 58 views
1

我有如下使用strtok一個小程序:çstrtok的不標記化而空的令牌值

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

int main() 
{ 
    char str[] ="1,2,,3,4,5"; 
    char * pch; 
    printf ("Splitting string \"%s\" into tokens:\n",str); 
    pch = strtok (str,","); 
    while (pch != NULL) 
    { 
    printf ("%s\n",pch); 
    pch = strtok (NULL, ","); 
    } 
    return 0; 
} 

我的輸出如來:

Splitting string "1,2,,3,4,5" into tokens: 
1 
2 
3 
4 
5 

但我需要得到一個空值作爲一個空字符串,當我遇到連續的分隔符時,例如,,。 也就是說我需要的輸出是因爲: 分割字符串 「1,2,3,4,5」 爲標記:

1 
2 

3 
4 
5 

任何補救措施?

+0

''1,2,,3,4,5「'--->」「1,2,,3,4,5」'沒有簡單的方法來做到這一點。您必須檢查strtok返回的地址,並檢查差異== 1. – LPs

+1

使用'strpbrk'按@ FredLarson的鏈接建議 –

+1

這是正確的行爲。只要檢查'strlen(pch)'並忽略它,如果它是零。 –

回答

2

這就是strtok()的行爲。引用man page

被解析的字符串中的兩個或多個連續分隔符字節的序列被認爲是單個分隔符。 [...]

您可以使用strchr()strpbrk()找出的每個分隔出現,並分別計數。