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

Était-ce utile?

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)
{
...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top