Рассмотрим следующий фрагмент, который использует strtok для разделения строки madddy.Попытка понять strtok
char* str = (char*) malloc(sizeof("Madddy"));
strcpy(str,"Madddy");
char* tmp = strtok(str,"d");
std::cout<<tmp;
do
{
std::cout<<tmp;
tmp=strtok(NULL, "dddy");
}while(tmp!=NULL);
Он отлично работает, выход Ma. Но путем изменения strtok к следующему,
tmp=strtok(NULL, "ay");
Выход будет Madd. Как работает strtok? У меня есть этот вопрос, потому что я ожидал, что strtok возьмет каждый символ, который находится в строке разделителя, который будет использоваться как разделитель. Но в некоторых случаях это делается именно так, но в некоторых случаях это дает неожиданные результаты. Может ли кто-нибудь помочь мне понять это?
Я честно думаю, что правильный способ сделать это, чтобы полностью прекратить использование 'strtok'. Это сложная в использовании, трудно отлаживаемая функция без каких-либо гарантий безопасности потоков. Вероятно, вам лучше использовать некоторую комбинацию 'string :: find' и' string :: substr' для синтаксического анализа. – templatetypedef
Или 'boost :: token_iterator' –
Я готов повторить это по важности и акценту, тем более, что вы используете C++, а не C. Также вы можете посмотреть в boost :: tokenize. –