Как разделить строку на маркеры в C?

Как разделить строку на маркеры '&' в C?

7
задан nbro 26 March 2016 в 16:56
поделиться

3 ответа

strtok / strtok_r

char *token;
char *state;

for (token = strtok_r(input, "&", &state);
     token != NULL;
     token = strtok_r(NULL, "&", &state))
{
    ...
}
13
ответ дан 6 December 2019 в 07:50
поделиться

Вы можете использовать функцию STROK (), как показано в примере ниже.

/// Function to parse a string in separate tokens 

int parse_string(char pInputString[MAX_STRING_LENGTH],char *Delimiter,
                   char *pToken[MAX_TOKENS])
{
  int i;
  i = 0;

  pToken[i] = strtok(pInputString, Delimiter);
  i++;

  while ((pToken[i] = strtok(NULL, Delimiter)) != NULL){
     i++;
  }
  return i;
}

/// The array pTokens[] now contains the pointers to the start of each token in the (unchanged) original string.

sprintf(String,"Token1&Token2");
NrOfParameters = parse_string(String,"&",pTokens);

sprintf("%s, %s",pToken[0],pToken[1]);
2
ответ дан 6 December 2019 в 07:50
поделиться

Я бы сделал это что-то подобное (используя strchr () ):

#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) */

strchr (const char * s, int c) возвращает указатель на Следующее расположение C в s или NULL , если C не найден в s .

Вы можете использовать STRTOK () , однако, я не люблю STRTOK () , потому что:

  • это модифицирует токеризующуюся строку, так что это Не работает для буквальных строк, или не очень полезен, когда вы хотите сохранить строку для других целей. В этом случае вы должны скопировать строку во временной первой.
  • Это объединяет смежные разделители, поэтому, если ваша строка «A && B & C» , возвращенные токены «A» , «B» , а «C» . Обратите внимание, что после этого нет пустого токена «A» .
  • Это не безопасно в потоке.
8
ответ дан 6 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: