私は次のようなコードを持っています:
int contains(LPCTSTR name)
{
char * data = "test.txt";
}
name
「データ」が含まれているかどうかを確認するにはどうすればよいですか? ありがとう!
Windowsとを使用しているのでTCHAR
、より慣用的な解決策は次のようになります。
BOOL contains(LPCTSTR lpName) {
return _tcsstr(name, _T("data"));
}
あなたdata
が故意char *
にである場合を除いて、その場合、答えは変わります。
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
.
他の人は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);
}