Я знаю, что это старый вопрос, но, возможно, кто-то найдет его полезным.В случае, если вы не хотите использовать какую-либо токенизирующую библиотеку / класс, здесь есть функция, которая сканирует строку для точной подстроки (без упомянутой проблемы).Кроме того, он почти не использует дополнительную память (строковые данные не копируются):
bool strstrexact(const char *str, const char *substr, const char *delim, const bool isRecursiveCall = 0)
{
static int substrLen;
if (!isRecursiveCall)
substrLen = strlen(substr);
if (substrLen <= 0)
return FALSE;
const char *occurence = strstr(str, substr);
if (occurence == NULL)
return FALSE;
occurence += substrLen;
if (*occurence == '\0')
return TRUE;
const char *nextDelim;
nextDelim = strstr(occurence, delim);
if (nextDelim == NULL)
return FALSE;
if (nextDelim == occurence)
return TRUE;
return strstrexact(nextDelim, substr, delim, TRUE);
}
Возвращает TRUE, если подстрока была найдена, или FALSE, если ее не было.В моем случае Вот как я это использовал:
if (strstrexact((const char*) glGetString(GL_EXTENSIONS), "WGL_ARB_pixel_format", " ")) {
// extension is available
} else {
// extension isn't available
}