仅在C中拆分字符串的第一个标记

时间:2018-07-10 00:06:36

标签: c strtok

我在拆分C语言中的字符串的第一个单词时遇到麻烦。

我已经尝试过strtok()并在此处阅读了一些相关问题,但没有达到我的预期。

例如输入:

USA;Soccer;Baseball;NBA

我想要作为输出:

Soccer;Baseball;NBA

3 个答案:

答案 0 :(得分:3)

您可以尝试一下
strstr manual

#include <stdio.h>
#include <string.h>
int main()
{
        char *a = "USA;Soccer;Baseball;NBA";
        //char *strstr(const char *haystack, const char *needle);
        char *b = strstr(a, ";");
        if((b != NULL))
            printf("%s\n",b+1);
        return 0;
}

或者这个:

strchr manual

#include <stdio.h>
#include <string.h>
    int main()
    {
            char *a = "USA;Soccer;Baseball;NBA";
            //char *strchr(const char *s, int c);
            char *b = strchr(a, ';');
            if((b != NULL))
                printf("%s\n",b+1);
            return 0;
    }

答案 1 :(得分:0)

稍微相关:strtok()会将字符串分成一系列标记,如果需要获取原始字符串的所有部分,可以使用这些标记,如下所示:

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

void main() {
        char line[] = "USA;Soccer;Baseball;NBA";

        char * cur;
        for (cur = strtok(line, ";"); cur != NULL; cur = strtok(NULL, ";")) {
                printf("- %s\n", cur);
        }
}

请注意:

  • strtok拥有一些内部状态,因此您不能将两个这样的循环相互嵌套(strtok_r可以避免此问题)
  • strtok更改了原始字符串,因此如果以后需要它,则需要进行复制

答案 2 :(得分:0)

如果您不允许在字符串中使用某些字符,则仍然可以使用strtok

#include <stdio.h>
#include <string.h>
int main()
{
    char input[] = "USA;Soccer;Baseball;NBA";
    char *skip   = strtok(input, ";");
    char *output = strtok(NULL, "?"); // Or any other character not allowed in the string.
    if(output != NULL)
        printf("%s\n",output);
    return 0;
}