Double comparaison de std string

Résolu
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

3 réponses

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

    1. KX,
      ca marche !

      if ((CNX_A != "") && (CNX_B != ""))
      {
      //
      }
      Merci.
      1. Modérateur
        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...)