strtok c несколько символов как один разделитель - PullRequest
3 голосов
/ 16 января 2020

Можно ли использовать несколько символов в качестве одного разделителя?

Я хотел бы строку в качестве разделителя для другой строки.

char * input = "inputvalue1SEPARATORSTRINGinputvalue2SEPARATORSTRINGinputvalue2";
char * output = malloc(sizeof(char*));
char * delim = "SEPARATORSTRING";

char * example()
{
    char * ptr = strtok(input, delim);

    while (ptr != NULL)
    {
      output = strcat(output, ptrvar);
      output = strcat(output, "\n");
      ptr = strtok(NULL, delim);
    }

    return output;
}

Возвращаемое значение печатается с помощью printf:

inputvalue1
inputvalue2
inputvalue3

1 Ответ

5 голосов
/ 16 января 2020

Нет , в соответствии с страницей руководства для strtok():

Аргумент delim указывает набор байтов, которые Разграничить токены в разобранной строке .

Если вы хотите использовать многобайтовую строку в качестве разделителя, нет встроенной функции, которая ведет себя как strtok(). Вместо этого вам нужно будет использовать strstr(), чтобы найти вхождения строки-разделителя во входных данных, и продвигаться вручную.

Вот пример из этого ответа :

char *multi_tok(char *input, char *delimiter) {
    static char *string;
    if (input != NULL)
        string = input;

    if (string == NULL)
        return string;

    char *end = strstr(string, delimiter);
    if (end == NULL) {
        char *temp = string;
        string = NULL;
        return temp;
    }

    char *temp = string;

    *end = '\0';
    string = end + strlen(delimiter);
    return temp;
}
...