2

パスの最も深いディレクトリ名を格納するこの変数 dirpath2 があります。

typedef std::basic_string<TCHAR> tstring;
tstring dirPath = destPath;
tstring dirpath2 = dirPath.substr(destPathLenght - 7,destPathLenght - 1);

次のような別の文字列と比較できるようにしたい:

if ( _tcscmp(dirpath2,failed) == 0 )
{
...       
}

私は多くのことを試しましたが、何もうまくいかないようです。誰かがこれを行う方法または私が間違っていることを教えてもらえますか?

私は C++ についてほとんど何も知らず、このすべてが私を狂わせていることを心に留めておいてください。

事前に感謝

4

3 に答える 3

8

std::basic_string<T>がオーバーロードされている場合はoperator==、これを試してください:

if (dirpath2 == failed)
{
...
}

あるいは、このようにすることもできます。にstd::basic_string<T>は への暗黙的な変換演算子がないため、メンバー関数をconst T*使用して に変換する必要があります。c_strconst T*

if ( _tcscmp(dirpath2.c_str(), failed.c_str()) == 0 )
{
...
}
于 2010-10-18T14:04:08.380 に答える
5

なぜ_tcscmpC++ 文字列を使用しているのですか? 組み込みの等値演算子を使用するだけです。

if(dirpath2==failed)
{
    // ...
}

STL 文字列で使用できる提供された比較演算子メソッドを見てください。

一般に、C++ 文字列を使用する場合、C 文字列関数を使用する必要はありません。ただし、C 文字列を期待する関数に C++ 文字列を渡す必要がある場合は、c_str()メソッドを使用しconstて、指定された C++ 文字列インスタンスの内容で C 文字列を取得できます。

ところで、「C++ についてほとんど何も知らない」場合は C 出身であっても、C++ の本を入手して読む必要があります。

于 2010-10-18T14:05:15.460 に答える
1

std::basic_string には == 演算子があります。文字列クラス テンプレートを使用します。

if (dirpath2 == failed)
{
...
}
于 2010-10-18T14:08:03.097 に答える