我知道這是一個老問題,但也許別人會覺得它有用。如果你不想使用任何標記庫/類,這裏是一個函數,掃描字符串的確切子字符串(沒有提到的問題)。此外,它幾乎不使用任何額外的內存(字符串數據不會被複制):
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);
}
如果子被發現或FALSE,如果不是它返回TRUE。在我的情況下,我使用它的方式如下:
if (strstrexact((const char*) glGetString(GL_EXTENSIONS), "WGL_ARB_pixel_format", " ")) {
// extension is available
} else {
// extension isn't available
}
嗯...認真嗎?即時我確定我之前檢查過...但現在我再次檢查,看起來像沒有空間...!他們到底在想什麼?好吧。然後,我可以自己添加空間。或更好的只是將它們添加到std :: map lol中。 – Rookie 2011-06-07 12:28:50
@Rookie:對於這些問題的典型解決方案是與特定的隔板來標記(一個'」「'在這種情況下),並做在令牌進行比較。 C標準庫有'strtok'這個。 – datenwolf 2011-06-07 13:14:55
@datenwol:strtok的是,不應該被提及,更不用說在C++中使用一個可怕的憎惡。 – 2011-06-07 15:47:35