4

我有一个像这样的代码:

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

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

4

4 回答 4

3

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

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

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

于 2012-10-06T20:30:58.963 回答
2

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

如果您改用 C++ std::string,则有该find方法。

于 2012-10-06T15:11:56.203 回答
2

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.

于 2012-10-06T15:16:10.813 回答
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);
}
于 2012-10-06T17:05:12.720 回答