C语言:如何在使用strtok()一次后获取剩余的字符串

Eri*_*eng 11 c strtok

我的字符串是"A,B,C,D,E"
并且分隔符是","
如何在执行strtok()之后获取剩余的字符串,即"B,C,D,E"

char a[] = "A,B,C,D,E";
char * separator = ",";
char * b = strtok(a,separator);
printf("a: %s\n", a);
printf("b: %s\n", b);
Run Code Online (Sandbox Code Playgroud)

输出为:
a:A
b:A

但是如何得到结果
a:B,C,D,E
b:

谢谢.

Nei*_*eil 19

您可以改变分隔符集,因此只需传递一个空字符串:

char a[] = "A,B,C,D,E";
char * separator = ",";
char * b = strtok(a, separator);
printf("b: %s\n", b);
char * c = strtok(NULL, "");
printf("c: %s\n", c);
Run Code Online (Sandbox Code Playgroud)

  • **不传递分隔符是可行的方法!** 就我而言,我不止一次使用了 `strtok`,在某些时候我需要剩余的部分。所以 **not** 使用 `strtok` 不是一个解决方案。既不求和字符,因为我在空间上“toking”,并且它可能包含可变数量的连续空格等。 (2认同)

unw*_*ind 8

不要用strtok()它,因为那不是它的用途.

使用strchr()查找第一个分离器,并从那里:

char a[] = "A,B,C,D,E";
const char separator = ',';
char * const sep_at = strchr(a, separator);
if(sep_at != NULL)
{
  *sep_at = '\0'; /* overwrite first separator, creating two strings. */
  printf("first part: '%s'\nsecond part: '%s'\n", a, sep_at + 1);
}
Run Code Online (Sandbox Code Playgroud)