Как я могу разбить строку на токены с помощью «&»

Я пытаюсь разбить строку на токены с помощью ';'. Но у меня проблема, например, некоторые токены пусты/нулевые; 123;123132;;;232;232323;;;;1; Поэтому я не могу использовать strtok, потому что он объединяет соседние разделители. Я вижу, что вы публикуете это решение:

include <string.h>

char *data = "this&&that&other";
char *next;
char *curr = data;
while ((next = strchr(curr, '&')) != NULL) {
    /* process curr to next-1 */
    curr = next + 1;
}
/* process the remaining string (the last token) */

Но я не понимаю, потому что, когда я делаю next-1, чтобы получить первое значение, я получаю только первое слово значения, а не все значение. Можете ли вы мне помочь? У вас есть идеи, как разделить это? Я программирую на Си. В другом посте я вижу, что существует функция strsep, которая кажется именно тем, что мне нужно, но в библиотеке C ansi эта функция не включена. Спасибо и извините за мой английский :)


person Neik11 garcia    schedule 01.08.2013    source источник


Ответы (1)


Я думаю, это то, что вы хотите: -

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

char* mystrsep(char** input, const char* delim)
{
  char* result = *input;
  char* p;

  p = (result != NULL) ? strpbrk(result, delim) : NULL;

  if (p == NULL)
    *input = NULL;
  else
  {
    *p = '\0';
    *input = p + 1;
  }

  return result;
}

int main()
{
  char str[] = "123;123132;;;232;232323;;;;1;";
  const char delimiters[] = ";";
  char* ptr;
  char* token;

    ptr = str;
  token = mystrsep(&ptr, delimiters);
  while(token)
    {
      printf("%s\n",token);
       token = mystrsep(&ptr, delimiters);
    }   
  return 0;
}
person P0W    schedule 01.08.2013