Я пытаюсь добавить в свою программу окно справки/информации, которое появляется всякий раз, когда кто-то вводит команды /h, /?, /help. Я хочу убедиться, что моя программа принимает все символы как в верхнем, так и в нижнем регистре. Из того, что у меня есть, я могу проверить наиболее частые случаи этих команд, но не все (т.е. /HeLp). Ищете способ охватить все базы. Вот мой текущий код:
....
bool CheckParseArguments(LPWSTR* argv, int argc)
{
for (int i = 0; i <= argc; i++)
{
const wchar_t* help[] = { L"/h", L"/H", L"/?", L"/Help", L"/HELP", L"/help"};
for (int h = 0; h <= 5; h++)
if (argc == (i + 1) && wcscmp(argv[i], help[h]) == 0)
{
MessageBoxW(NULL, L"Correct input is ...", L"Help", MB_OK);
return false;
}
}
.... continue with other checks....
Если вы преобразуете каждую букву в нижний регистр, вам нужно только проверить, соответствует ли она «помощи». В C++ есть функция std::tolower
, которая может вам помочь.
С компилятором Microsoft (который вы, кажется, используете) вы можете использовать функцию _wcsicmp
вместо wcscmp
для выполнения сравнения без учета регистра.
Другие платформы имеют аналогичные функции, например strcasecmp
и wcscasecmp
в Linux.
Сам ISO C++ не предоставляет функцию, которая выполняет сравнение без учета регистра. Однако можно преобразовать всю строку в нижний регистр с помощью функции std::tolower
или std::towlower
перед выполнением сравнения. После этого вам не понадобится сравнение без учета регистра, но вы можете выполнить стандартное сравнение с учетом регистра.
Преобразуйте команду в нижний регистр, и тогда вам нужно будет сравнить ее только один раз.