get the last token of a string in C
Asked Answered
K

2

5

what I want to do is given an input string, which I will not know it's size or the number of tokens, be able to print it's last token.

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;

and i want my return to be

string

but I what I get is (null). Any workarounds? I've searched the web and can't seem to find an answer to this. At least for C programming language.

Kan answered 28/9, 2015 at 12:27 Comment(1)
You can use basename API in C. char *basename(char *path);Halfcaste
H
23

If you tokenize on a specific character, i.e. '/' in your example, you do not need to tokenize the string at all: call strrchr to find the position of the last '/', and add 1 to the resultant pointer to skip the delimiter, like this:

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

Demo.

Hyperextension answered 28/9, 2015 at 12:33 Comment(1)
@Sanaf last++ isn't the same; you need ++last t if you want it to point at the final token.Hyperextension
L
4

Just use another variable to store last token before it gets null

char s[] = "some/very/big/string";
char * token, * last;
last = token = strtok(s, "/");
for (;(token = strtok(NULL, "/")) != NULL; last = token);
printf("%s\n", last);
Lorinalorinda answered 28/9, 2015 at 12:36 Comment(1)
@bisuke It's a simplification. You could rewrite it to something like: while(token != NULL) { last = token; token = strtok(NULL, "/"); } Lorinalorinda

© 2022 - 2024 — McMap. All rights reserved.