2015-09-28 88 views
1

我想要做的是給出一個輸入字符串,我將不是知道它的大小或令牌的數量,能夠打印它的最後一個令牌。得到一個字符串的最後一個令牌C

e.x:

char* s = "some/very/big/string"; 
char* token; 

const char delimiter[2] = "/"; 

token = strtok(s, delimiter); 

while (token != NULL) { 
    printf("%s\n", token); 
    token = strtok(NULL, delimiter); 
} 

return token; 

,我想我的回報是

,但我什麼,我得到的是(空)。任何解決方法?我搜索了網頁,似乎無法找到答案。至少對於C語言來說。

+0

您可以在C. char * basename(char * path)中使用basename API; – user3799762

回答

12

如果記號化在一個特定的字符,在你的榜樣,即'/',你並不需要在所有記號化的字符串:調用strrchr找到最後'/'的位置,並添加1到得到的指針跳過分隔符,就像這樣:

char *s = "some/very/big/string"; 
char *last = strrchr(s, '/'); 
if (last != NULL) { 
    printf("Last token: '%s'\n", last+1); 
} 

Demo.

+0

這是完美的!謝謝! – Jack

4

只需使用另一個變量來存儲最後一個記號它變得無效之前

char s[] = "some/very/big/string"; 
char * token, * last; 
last = token = strtok(s, "/"); 
for (;(token = strtok(NULL, "/")) != NULL; last = token); 
printf("%s\n", last); 
+1

你能簡化for循環嗎?我不明白你在做什麼.. – bisuke

+0

@bisuke這是一個簡化。您可以將其重寫爲: 'while(token!= NULL) { last = token; token = strtok(NULL,「/」); } ' –

相關問題