2015-09-28 104 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,“/”); } ' –

相关问题