String dans un template [C++]
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

String dans un template [C++]



  1. #1
    invite48ca7510

    String dans un template [C++]


    ------

    Bonjour à tous,

    j'essaye de créer une fonction qui retourne la plus petite valeur de 3 paramètres.
    Ma fonction marche avec des entiers (comme dans le code ci-dessous), mais pas avec les strings...

    Code:
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    template <class T> T min(T v1, T v2, T v3)
    {
              T min = v1;
              
              if (v2<v1)
              {
                        if (v3<v2) min = v3;
                        else min=v2;
              }
              if (v3<v1)
              {
                        if (v2 < v3) min = v2;
                        else min = v3;
              }
              return min;
    }
    
    int main()
    {
        cout << min(85,2,3) << endl; // doit retourner 2
        cout << min("o","zephir","ab") << endl; // doit retourner zephir 
        
        system("PAUSE");
        return 0;   
    }

    Merci d'avance pour votre aide, je ne comprends pas ce qui ne marche pas...

    -----

  2. #2
    invite2d7144a7

    Re : String dans un template [C++]

    Bonjour,

    Ce qui ne marche pas, c'est qu'on ne teste pas des chaînes de caractères comme tu le fais.

    Un petit programme de test t'en convaincra aisément, genre
    Code:
    ...
      s1 = "a";
      s2 = "b";
      if (s1==s2) cout << "égalité trouvée";
    Au passage, ce ne sont pas des "string" au sens de C++ que tu testes, mais de bonnes vieilles chaînes de caractères du C (char *).


  3. #3
    invite48ca7510

    Re : String dans un template [C++]

    Je m'en doutais ...

    Alors comment faire svp?

    Ma fonction doit marcher avec tous les types....

  4. #4
    Dlzlogic

    Re : String dans un template [C++]

    Bonjour,
    D'abord, il faudrait définir la notion de "plus petit" avec des chaines.
    Par ailleurs, si vous voulez, je peux très bien faire une telle fonction en C, qui marche avec tout les types (bien que dans mon esprit ça ne veuille rien dire).

  5. A voir en vidéo sur Futura
  6. #5
    invite48ca7510

    Re : String dans un template [C++]

    Bonjour,

    dans l'énoncé il est écrit
    "1 Créer une fonction retournant la plus petite valeur de trois arguments passés en paramètre en utilisant un template et pas de define.
    2. Quelle propriété doit avoir le type commun des trois arguments pour qu'une telle fonction marche ?
    3. Donner l'appel de cette fonction avec trois objets de type string : coucou, tagada, zebulon (le résultat doit être zebulon)."

    Donc pour la première question, il me semblait que ma fonction marchait, mais apparemment non !
    Pour la deuxième, aucune idée ! Peut-être faut-il que ce soit un type "simple" (i.e. int, float, double, string, ...), mais je ne sais pas vraiment la réponse
    Troisième question, ce bug...

    Je pense qu'ici (avec les string), "plus petit" => ordre alphabétique inversé (z < y < w .... b < a)

  7. #6
    Jack
    Modérateur

    Re : String dans un template [C++]

    cout << min((string)"o",(string)"zephi r",(string)"ab") << endl; // doit retourner zephir
    Je m'en doutais ...

    Alors comment faire svp?
    On respecte l'énoncé:
    3. Donner l'appel de cette fonction avec trois objets de type string : coucou, tagada, zebulon (le résultat doit être zebulon)."
    Ce sont des OBJETS DE LA CLASSE STRING qu'il faut passer, donc à l'appel on passe à la fonction des paramètres avec le bon type:
    Code:
        cout << min((string)"o",(string)"zephir",(string)"ab") << endl; // doit retourner zephir
    Au passage, je ne vois pas la logique de retourner zébulon (ou zephir dans ton code) comme plus petite chaine. En principe, les chaines sont comparées caractère par caractère jusqu'à trouver un caractère dont le rang est différent de l'autre.
    Et même en considérant la longueur de la chaine comme critère de comparaison, je ne vois pas en quoi zebilon serait la la chaine mini.

    A+

  8. #7
    invite2d7144a7

    Re : String dans un template [C++]

    Bonjour,

    Il est un fait que je ne vois pas la logique concernant le classement de ces chaînes.

    Utiliser - apparemment - un ordre alphabétique inversé pour un simple petit exercice paraît aberrant.

  9. #8
    Dlzlogic

    Re : String dans un template [C++]

    Bonjour Whoami,
    Je vais même rajouter un anecdote. Il y a quelques années, je faisais connaissance avec un langage interprété faisant partie intégrante d'un logiciel CAO-DAO-SIG.
    La comparaison des chaines se faisait avec des opérateurs différents de "==" et "!=" que j'avais l'habitude d'utiliser.
    Je me suis entretenu avec l'auteur de ce logiciel et il m'a répondu : "c'est tout de même pas la même chose".

  10. #9
    invite43901482

    Re : String dans un template [C++]

    Bonjour,

    Je suis d'accord avec whoami, pourquoi "zephir" au lieu de "ab"? Je ne vois pas la logique...

    Bref, il suffirait peut-être de dire que la valeur max est simplement la valeur min

  11. #10
    invite48ca7510

    Re : String dans un template [C++]

    Bonjour,

    j'ai trouvé la solution à mon problème, assez bête : l'appel de la fonction doit être min<string>("..","..","..");

    Voilà voilà ^^

    Merci à tous pour vos réponses

  12. #11
    invite48ca7510

    Re : String dans un template [C++]

    Désolé du double post :

    aussi, cela devait retourner zebulon mais zebulon devait être écrit ... Zebulon ! Avec un "z" majuscule ! (code ASCII des caractères, majuscules < minuscules)

    Voilà toute l'histoire.

    Donc min("ab","toto","Zorro") retourne bien Zorro (le <string> n'étant pas obligatoire, le paramètre de généricité étant implicite)

    Bonne soirée à vous

  13. #12
    invite2d7144a7

    Re : String dans un template [C++]

    Bonjour,

    Bref, un exercice ridicule : pourquoi vouloir travailler avec des chaînes de caractères si on ne tient pas compte de l'ordre alphabétique "humain" ?

    Autant se contenter de valeurs numériques.

    Si c'est la réponse du prof, je suggère d'en changer.

  14. #13
    Dlzlogic

    Re : String dans un template [C++]

    Je suis aussi de cet avis.
    D'autant qu'il y a des tas de petits exercices qui correspondent à des fonction qu'on aura un jour ou l'autre l'occasion d'utiliser.

  15. #14
    invite48ca7510

    Re : String dans un template [C++]

    Je pense qu'il voulait se concentrer sur les caractères ASCII, ou je ne sais pas ... Au moins, ça marche !

    Merci encore !

  16. #15
    invite2d7144a7

    Re : String dans un template [C++]

    Bonjour,

    Si c'était pour les caractères, il suffisait de parler de caractères, pas de "string".

    En tant qu'enseignant, je vois là une certaine volonté de coincer les élèves, car la plupart ont dû bloquer en cherchant une réponse logique pour classer dans l'ordre alphabétique, avec une réponse qui ne le fait pas.

    Je répète donc, bien que sachant que c'est impossible : il faut changer de prof !

Discussions similaires

  1. JAVA - recherche dans une string
    Par invite13a7daa0 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 15/05/2013, 02h01
  2. Ecriture dans un fichier texte à partir d'une Arraylist de String
    Par invite9da73615 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 13/06/2012, 09h25
  3. Python - Peut-on lire un fichier et envoyer les lignes dans une liste au lieu d'une string ?
    Par invitef702cf04 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 21/02/2012, 12h40
  4. [C++] octet d'un fichier dans un string
    Par invite588b7304 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 19/09/2011, 14h19
  5. une corde dans les boucles ? (string + LQG)
    Par doul11 dans le forum Physique
    Réponses: 4
    Dernier message: 22/04/2010, 09h37