包含 LPCTSTR 功能

问题描述 投票:0回答:4

我有这样的代码:

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

如何检查

name
是否包含“数据”?谢谢!

c++ c contains
4个回答
4
投票

由于您使用的是 Windows 和

TCHAR
,更惯用的解决方案是:

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

除非你的

data
故意是
char *
,在这种情况下答案会改变。


3
投票

有一个名为

strstr
的函数用于检查一个字符串是否包含另一个字符串。但是,由于您使用的是
LPCTSTR
,您应该注意它可能会根据您的项目设置而有所不同。如果您在链接的手册页中阅读更多内容,您会看到它提到
_tcsstr
这是一个将扩展为正确函数的宏。

如果您使用 C++

std::string
,则有
find
方法。


2
投票

无论是否 Unicode,您都可以使用 Shell 轻量级实用字符串函数

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.