strtok одного символа


Я должен маркировать строку в следующем формате:

 pippo:c:C2,C3,C4:pippo

Как я могу маркировать эту строку с помощью strtok (мне больше не нужна строка, как только я сделал маркировку). Я хочу, чтобы одинокий символ хранился в переменной char, а не в переменной char*.

2 3

2 ответа:

Если вы хотите только c в части :c:, и вы знаете, что вещи будут иметь этот формат, вам не нужно заходить так далеко, как токенизация. Вы можете просто сделать

char c = strchr(str, ':')[1];

Это находит первое :, и получает символ, следующий за ним. Конечно, strtok также будет работать:

strtok(str, ":");
char c = strtok(NULL, ":")[0];
Это позволяет получить второе маркированное Слово и получить первый символ этого слова. В общем, если вы хотите, чтобы все было дальше, вы, вероятно, захотите использовать цикл вместо этого. Не то, чтобы буфер str должен быть пишется в этом случае, в отличие от других.

Наконец, если часть pippo всегда имеет одинаковую длину, вам может сойти с рук просто

char c = str[6];

Во всех случаях, str = "pippo:c:C2,C3,C4:pippo".

Если вы хотите получить один символ между двумя токенами с помощью strtok(), Вы можете сделать это, проверив длину строки, которую вы извлекли.

int main ()
{
    char str[] ="pippo:c:C2,C3,C4:pippo";
    char * pch;
    char winner;

    pch = strtok (str,":"); 
    while (pch != NULL)
    {
      if(strlen(pch) == 1){   // if there's only 1 char we got it
        winner = pch[0];      // if there's more than 1 single char of :x: format you
        break;                // could check for that too here.
      }
      pch = strtok (NULL, ":");
    }

    printf("And the winner is: %c\n", winner);
    return 0;
}