Double comparaison de std string
Résolu
cedric
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
je voudrais savoir comment coder une double comparaison en C/C++ sur des std string
Si A ou B est vide, je ne rentre pas dans le if
std::string A , std::string B
if ((CNX_A.empty() != 0) || (CNX_B.empty() != 0))
merci d'avance,
cedric
je voudrais savoir comment coder une double comparaison en C/C++ sur des std string
Si A ou B est vide, je ne rentre pas dans le if
std::string A , std::string B
if ((CNX_A.empty() != 0) || (CNX_B.empty() != 0))
merci d'avance,
cedric
A voir également:
- Double comparaison de std string
- Double ecran - Guide
- Whatsapp double sim - Guide
- Comparaison million milliard - Accueil - Technologies
- Double driver - Télécharger - Pilotes & Matériel
- Double appel - Guide
3 réponses
Regarde la documentation de std::string et en particulier std::string::empty()
if (!A.empty() && !B.empty()) { // ... }La confiance n'exclut pas le contrôle
Bonjour Cedric,
Pour ne pas rentrer dans ton if, tes deux string doivent être remplis visiblement. Plutôt que de dire
un truc du genre :
Pour ne pas rentrer dans ton if, tes deux string doivent être remplis visiblement. Plutôt que de dire
si(non_vide(A)) ou (non_vide(B)), pourquoi ne pas faire le test,
si(remplis(A et B))?
un truc du genre :
if ((A.size() > 0) && (B.size() > 0)) then // else //
L'opérateur != n'est pas défini dans std::string, et si parfois ça marche, l'utiliser peux t'amener à des erreurs. c'est pour cela qu'il existe la méthode std::string::compare mais qui est de toute façon beaucoup plus lourde en nombre d'opérations qu'utiliser directement std::string::empty :
Regarde pour comparer les deux implémentations (un peu simplifiées) de empty et compare :
Il y a donc tout intérêt à utiliser empty plutôt que compare ( != étant à bannir...)
Regarde pour comparer les deux implémentations (un peu simplifiées) de empty et compare :
bool empty() const { return (_Mysize == 0); } int compare(size_type _Off, size_type _N0, const _Elem *_Ptr, size_type _Count) const { if (_Mysize < _Off) _String_base::_Xran(); if (_Mysize - _Off < _N0) _N0 = _Mysize - _Off; size_type _Ans = _Traits::compare(_Myptr() + _Off, _Ptr, _N0 < _Count ? _N0 : _Count); return (_Ans != 0 ? (int)_Ans : _N0 < _Count ? -1 : _N0 == _Count ? 0 : +1); }
Il y a donc tout intérêt à utiliser empty plutôt que compare ( != étant à bannir...)