У меня есть код как:
int contains(LPCTSTR name)
{
char * data = "test.txt";
}
Как я могу проверить, name
содержит «данные»? Спасибо!
Есть функция под названием strstr
это используется, чтобы проверить, содержит ли строка другую строку. Тем не менее, так как вы используете LPCTSTR
Вы должны отметить, что это может отличаться в зависимости от настроек вашего проекта. Если вы прочитаете больше на связанной странице руководства, вы увидите упоминание _tcsstr
который является макросом, который расширится до правильной функции.
Если вы используете C ++ std::string
вместо этого есть find
метод.
Так как вы используете Windows и TCHAR
более идиоматическим решением будет:
BOOL contains(LPCTSTR lpName) {
return _tcsstr(name, _T("data"));
}
Если только ваш data
намеренно char *
, в этом случае ответ меняется.
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
,
Другие предложили 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);
}