C ++ TString comparer
Question
J'ai cette dirpath2 variable à laquelle je stocke le nom du répertoire le plus profond d'un chemin:
typedef std::basic_string<TCHAR> tstring;
tstring dirPath = destPath;
tstring dirpath2 = dirPath.substr(destPathLenght - 7,destPathLenght - 1);
Je veux être en mesure de comparer une autre chaîne, quelque chose comme:
if ( _tcscmp(dirpath2,failed) == 0 )
{
...
}
J'ai essayé beaucoup de choses, mais rien ne semble fonctionner. Quelqu'un peut-il me dire comment faire ou ce que je fais mal?
S'il vous plaît gardez à l'esprit que je connais presque à côté de rien C ++ et tout cela me rend fou.
Thanx à l'avance
La solution
std::basic_string<T>
ont un operator==
surchargé, essayez ceci:
if (dirpath2 == failed)
{
...
}
Sinon, vous pouvez le faire comme ça. Comme std::basic_string<T>
ne dispose pas d'un opérateur de conversion implicite à const T*
, vous devez utiliser la fonction membre de c_str
pour convertir en const T*
:
if ( _tcscmp(dirpath2.c_str(), failed.c_str()) == 0 )
{
...
}
Autres conseils
Pourquoi utilisez-vous _tcscmp
avec une chaîne C ++? Il suffit de l'utiliser l'opérateur de l'égalité de builtin:
if(dirpath2==failed)
{
// ...
}
Jetez un oeil sur les et qui peuvent être utilisés avec le chaînes STL.
En général, si vous utilisez les chaînes de C vous n'avez pas besoin d'utiliser les fonctions de chaîne C; Toutefois, si vous devez passer des chaînes C ++ à des fonctions qui attendent C-chaînes vous pouvez utiliser le c_str()
méthode pour obtenir un const
C-chaîne avec le contenu de la chaîne spécifiée instance de C ++
Par ailleurs, si vous savez « presque à côté de rien C ++ », vous devez vraiment obtenir un C ++ livre et le lire, même si vous venez de C.
std :: basic_string a un opérateur ==. Utilisez le modèle de classe chaîne:
if (dirpath2 == failed)
{
...
}