Double comparaison de std string

Résolu
cedric -  
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
A voir également:

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
1
Heremion Messages postés 538 Date d'inscription   Statut Membre Dernière intervention   102
 
Bonjour Cedric,

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
//

0
cedric
 
KX,
ca marche !

if ((CNX_A != "") && (CNX_B != ""))
{
//
}
Merci.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 :

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...)
0