Double comparaison de std string
Résolu/Fermé
cedric
-
Modifié par cedric le 12/09/2011 à 13:53
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 12 sept. 2011 à 14:05
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 12 sept. 2011 à 14:05
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
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
Modifié par KX le 12/09/2011 à 13:50
Modifié par KX le 12/09/2011 à 13:50
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
Heremion
Messages postés
538
Date d'inscription
vendredi 20 mai 2011
Statut
Membre
Dernière intervention
1 juin 2022
102
12 sept. 2011 à 13:35
12 sept. 2011 à 13:35
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 //
KX,
ca marche !
if ((CNX_A != "") && (CNX_B != ""))
{
//
}
Merci.
ca marche !
if ((CNX_A != "") && (CNX_B != ""))
{
//
}
Merci.
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
Modifié par KX le 12/09/2011 à 14:10
Modifié par KX le 12/09/2011 à 14:10
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...)