包含LPCTSTR的功能

时间:2012-10-06 14:57:51

标签: c++ c contains

我有一个代码:

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

如何检查name是否包含'数据'?谢谢!

4 个答案:

答案 0 :(得分:2)

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

如果您使用C ++ std::string,则可以使用find方法。

答案 1 :(得分:2)

由于您使用的是Windows和TCHAR,因此更为惯用的解决方案是:

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

除非data故意是char *,否则答案会更改。

答案 2 :(得分:1)

Unicode或非Unicode,您可以使用Shell Lightweight Utility String Functions

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

您需要加入shlwapi.h并链接shlwapi.lib

另请注意,StrStrI不区分大小写,使用区分大小写,只是StrStr

答案 3 :(得分:1)

其他人提出C方法;因为您使用了标签“c ++”,所以您可能希望使用该语言及其功能,如bool返回类型或字符串类。

此外,由于您正在编写Windows代码(我阅读LPCTSTR name参数),您可能希望使用Windows特定的方便类,如CString

在这种情况下,您可以使用CString::Find() method,或将其包装在这样的函数中(应该在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);
}