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/ для подробного описания.