C strtok не токенизирует пустое значение токена

У меня есть небольшая программа, которая использует strtok, как показано ниже:

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

int main ()
{
  char str[] ="1,2,,3,4,5";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str,",");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, ",");
  }
  return 0;
}

Мой вывод выглядит следующим образом:

Splitting string "1,2,,3,4,5" into tokens:
1
2
3
4
5

Но мне нужно получить пустое значение как пустую строку, когда я встречаю последовательные разделители, например, ,, в этом случае. т.е. Мне нужно, чтобы результат был таким: Разделение строки «1,2,3,4,5» на токены:

1
2

3
4
5

Любое средство?


person Dr. Debasish Jana    schedule 31.03.2017    source источник
comment
"1,2,,3,4,5" ---› "1,2, ,3,4,5" Нет простых способов сделать это. Вы должны проверить адреса, возвращаемые strtok, и проверить, равна ли разница == 1.   -  person LPs    schedule 31.03.2017
comment
используйте strpbrk, как предложено по ссылке @FredLarson   -  person Chris Turner    schedule 31.03.2017
comment
Это правильное поведение. Просто отметьте strlen(pch) и игнорируйте его, если он равен нулю.   -  person Carey Gregory    schedule 31.03.2017


Ответы (1)


Вот как ведут себя strtok(). Цитирование справочной страницы

Последовательность из двух или более смежных байтов-разделителей в анализируемой строке считается одним разделителем. [...]

Вы можете использовать strchr() или strpbrk(), чтобы узнать каждое вхождение разделителя и подсчитать отдельно.

person Sourav Ghosh    schedule 31.03.2017