strtok () токенизируется только один раз при вложении - PullRequest
0 голосов
/ 23 сентября 2018

Предположим, у меня есть следующая строка: 0:1,2,3.

Я хочу сначала разделить, используя : в качестве разделителя, и когда он попадает во вторую часть (т.е. 1,2,3) и попытаться использоватьstrtok для этого (с ,) он не работает должным образом.

#include <stdio.h>
#include <stdbool.h>

int main(void){
    char s[10];
    strcpy(s, "0:1,2,3");
    char* token1 = strtok(s, ":");
    //To let me know it is on the second part
    bool isSecondToken = false;
    while (token1) {
        printf("token1: %s\n", token1);
        if(isSecondToken == true){
            char* token2 = strtok(token1, ",");
            while (token2) {
                printf("token2: %s\n", token2);
                token2 = strtok(NULL, " ");
            }
        }
        token1 = strtok(NULL, " ");
        isSecondToken = true;
    }
}

Вывод получен:

token1: 0
token1: 1,2,3
token2: 1
token2: 2,3

Ожидаемый вывод:

token1: 0
token1: 1,2,3
token2: 1
token2: 2
token2: 3

1 Ответ

0 голосов
/ 23 сентября 2018

При обновлении указателей token1 и token2 необходимо использовать один и тот же разделитель токенов:

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

int main(void){
    char s[10];
    strcpy(s, "0:1,2,3");
    char* token1 = strtok(s, ":");
    //To let me know it is on the second part
    bool isSecondToken = false;
    while (token1) {
        printf("token1: %s\n", token1);
        if(isSecondToken == true){
            char* token2 = strtok(token1, ",");
            while (token2) {
                printf("token2: %s\n", token2);
                token2 = strtok(NULL, ",");
            }
        }
        token1 = strtok(NULL, ":");
        isSecondToken = true;
    }
}

Также для strcpy требуется библиотека string.h, так что вы, вероятно, также получили некоторыепредупреждения о неявном объявлении.

...