Если вы собираетесь ограничить себя английскими (ASCII) ключевыми словами, тогда есть тривиальный способ сделать сравнение. Это не обобщает, если вы хотите использовать буквы, отличные от A-Z, в своих ключевых словах, но прекрасно работает для A-Z.
Если вы гарантируете, что одним из значений, передаваемых этой функции, будет известная строка с ключевыми словами, содержащая только видимые символы в диапазоне ASCII 32-127 (AZ, az, 0-9, большинство символов), тогда вы можете сделать простая битовая маскировка для преобразования нижнего в верхний регистр.
bool IsKeywordMatch(LPCTSTR psz, LPCTSTR pszKey)
{
while (pszKey[0])
{
if (psz[0] < 0x20)
return false;
if ((psz[0] & ~0x20) != (pszKey[0] & ~0x20))
return false;
++psz;
++pszKey;
}
return true;
}
Этот код НЕ сравнение строк общего назначения, оно специализировано для сравнения заведомо правильного ключевого слова с входной строкой. Он будет обрабатывать {} как верхний регистр [], `как верхний регистр @, ~ как верхний регистр ^, но если один из входов этой функции гарантированно не содержит ни одного из этих символов, то это не имеет значения.
Он предназначен для использования таким образом
if (IsKeywordMatch(pszInput, "value"))