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が故意char *にである場合を除いて、その場合、答えは変わります。

于 2012-10-06T20:30:58.963 に答える
2

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 に答える
2

strstr文字列に別の文字列が含まれているかどうかを確認するために使用される関数があります。ただし、使用してLPCTSTRいるため、プロジェクトの設定によって異なる場合があることに注意してください。リンクされたマニュアルページでさらに読む_tcsstrと、正しい関数に展開されるマクロについて言及されていることがわかります。

std::string代わりにC++ を使用する場合は、findメソッドがあります。

于 2012-10-06T15:11:56.203 に答える
1

他の人はCのアプローチを提案しました。boolタグ「c++」を使用したので、その言語と戻り値の型や文字列クラスなどの機能を使用したい場合があります。

また、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 に答える