【问题标题】:get the last token of a string in C获取 C 中字符串的最后一个标记
【发布时间】:2015-12-25 16:40:47
【问题描述】:

我想要做的是给定一个输入字符串,我将知道它的大小或标记的数量,能够打印它的最后一个标记。

例如:

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;

我希望我的回归是

字符串

但我得到的是(null)。任何解决方法?我在网上搜索过,似乎无法找到答案。至少对于 C 编程语言。

【问题讨论】:

  • 你可以使用C语言中的basename API char *basename(char *path);

标签: c tokenize strtok


【解决方案1】:

如果您对特定字符进行标记,即示例中的'/',则根本不需要对字符串进行标记:调用strrchr以查找最后一个'/'的位置,并添加1指向结果指针以跳过分隔符,如下所示:

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

Demo.

【讨论】:

    【解决方案2】:

    在它变为空之前使用另一个变量来存储最后一个令牌

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

    【讨论】:

    • @bisuke 这是一个简化。您可以将其重写为:while(token != NULL) { last = token; token = strtok(NULL, "/"); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多