C++ с использованием нескольких strtok()

Здравствуйте, у меня есть следующий текст:

htttp://zbw.eu/stw/descriptor/17782-1> htttp://www.w3.org/2004/02/skos/core#inScheme> htttp://zbw.eu/stw> .

htttp://aims.fao.org/aos/agrovoc/c_2678> htttp://www.w3.org/2004/02/skos/core#exactMatch> htttp://zbw.eu/stw/descriptor/15918-5> . #komentar k totte hlouposti

..и эта функция для токенизации данных, когда появляется новая строка:

    bool isCorrect(char* buffer){
    char* tok;

    tok = strtok( buffer,"\n");

    while(tok != NULL){         
        bool i = isTriple(tok);

        tok = strtok(NULL, "\n");
    }

    return true;
}

когда у меня есть отдельный токен, я хочу его токенизировать больше, поэтому токен отправляется функции isTriple(char * token):

    bool isTriple(char* token){
    char* tok;

    tok = strtok(token, " ");

    while(tok != NULL){
        tok = strtok(token, " ");
    }

    return true;
}

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

Проблема в том, что когда я вызываю isTriple(), он не создает новые меньшие токены. Внезапно он замерзает.

Кто-нибудь может сказать мне, где я не прав?

Спасибо.

1 ответ

При первом вызове функция strtok ожидает в качестве аргумента строку C, первый символ которой используется в качестве начального местоположения для сканирования токенов. При последующих вызовах функция ожидает нулевой указатель и использует позицию сразу после конца последнего токена в качестве нового начального местоположения для сканирования.

Поэтому вам не следует использовать эту функцию "одновременно" для нескольких входных строк.

См. http://www.cplusplus.com/reference/cstring/strtok/ для подробного описания.

Другие вопросы по тегам