Содержит функцию для LPCTSTR

У меня есть код как:

int contains(LPCTSTR name)
{
char * data = "test.txt";
}

Как я могу проверить, name содержит «данные»? Спасибо!

3

Решение

Есть функция под названием strstr это используется, чтобы проверить, содержит ли строка другую строку. Тем не менее, так как вы используете LPCTSTR Вы должны отметить, что это может отличаться в зависимости от настроек вашего проекта. Если вы прочитаете больше на связанной странице руководства, вы увидите упоминание _tcsstr который является макросом, который расширится до правильной функции.

Если вы используете C ++ std::string вместо этого есть find метод.

2

Другие решения

Так как вы используете Windows и TCHARболее идиоматическим решением будет:

BOOL contains(LPCTSTR lpName) {
return _tcsstr(name, _T("data"));
}

Если только ваш data намеренно char *, в этом случае ответ меняется.

2

Unicode или не Unicode, вы можете использовать Оболочка Облегченные служебные строковые функции:

int contains(LPTSTR name)
{
LPTSTR data = _T("test.txt");
if(StrStrI(name, data) != NULL)
{
return 1;
}
return 0;
}

Вам нужно будет включить shlwapi.h и ссылка shlwapi.lib,

Также обратите внимание на StrStrI нечувствителен к регистру, чтобы использовать регистрозависимый, это просто StrStr,

1

Другие предложили C подходы; так как вы использовали тег «c ++», вы можете использовать этот язык и его функции, такие как bool возвращаемый тип или строковые классы.

Более того, поскольку вы пишете код для Windows (я прочитал LPCTSTR name параметр), вы можете использовать специальные удобные классы Windows, такие как CString,

В этом случае вы можете просто использовать CString::Find() метод, или оберните его в функцию, подобную этой (которая должна компилироваться в сборках ANSI / MBCS и Unicode):

bool ContainsSomeText(const CString& name)
{
const TCHAR* data = _T("test.txt");
return (name.Find(data) >= 0);
}

Более того, если вы хотите без учета регистра сравнение, вы можете позвонить CString::MakeLower() во входной строке (и в этом случае передайте по значению, потому что вы изменяете копию):

bool ContainsSomeText(CString name)
{
const TCHAR* data = _T("test.txt"); // lower-case
return (name.MakeLower().Find(data) >= 0);
}
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector