Forum Programmation.c++ Des Chiffres et des Lettres

Posté par  .
Étiquettes : aucune
0
10
mai
2005
Voila une question qui me turlupine depuis un moment , comment melanger efficacement des chiffres et des lettres
par exemple
x=5 , y =2
et cree la chaine " x vaut 5 et y vaut 2 "
Je connais les methodes suivantes mais aucune ne me satisfait vraiement

Premiere Methode que je connais , sprintf a la C
sprintf(chaine,"x vaut %d et y vaut %d",x,y)

Seconde methode uttiliser des stream

chaine << " x vaut " << x << " et y vaut" << y;

j'ai l'impression que cette methode tend a deconner en particulier lorsque la valeur de la chaine change dans une boucle

Y a t'il d'autre methode je pense en particulier aux string STL

Merci ...
  • # Pourquoi faire compliqué quand ....

    Posté par  . Évalué à 1.

    Premiere Methode que je connais , sprintf a la C
    sprintf(chaine,"x vaut %d et y vaut %d",x,y)

    En quoi cette méthode ne te satisfait pas ?
    • [^] # Re: Pourquoi faire compliqué quand ....

      Posté par  . Évalué à 3.

      Parce que ce n'est pas du C++. Quite à passer à un langage objet, autant le faire complètement.
      • [^] # Re: Pourquoi faire compliqué quand ....

        Posté par  . Évalué à 2.

        ahhhh ce besoin de faire de l'objet pour l'objet ...

        si x et y sont de simples nombres sprintf reste la meilleure solution c++ ou pas c++. a tout point de vue : concision, rapidité, encombrement...

        c'est uniquement si x et y etaient des objets veritables comme des nombres complexes qu'on peut faire avec des stream, et encore
        • [^] # Re: Pourquoi faire compliqué quand ....

          Posté par  . Évalué à 2.

          Je suis d'accord avec ça, mais je pense que cela s'adresse à des codeurs déjà confirmés plutôt qu'à des débutants dans un langage particulier. Dans le premier cas, on parle d'optimisation, de relativisation des différentes méthodes, etc., dans le deuxième, on masque une lacune.
          • [^] # Re: Pourquoi faire compliqué quand ....

            Posté par  (site web personnel) . Évalué à 1.

            Il ne faut pas non plus que le code évolue et que les types et paramètres soient appelés à changer.
            Bien au delà des lacunes, il y a la simplicité d'utilisation et la maintenabilité.
            Rien de tel qu'un coredump lors un log à cause d'un paramètre en conflit avec le format (et vice-versa). L'expérience ne change rien à l'inattention.
  • # Des strings et des lettres

    Posté par  . Évalué à 4.

    J'ai l'impression que cette methode tend a deconner en particulier lorsque la valeur de la chaine change dans une boucle.


    En fait, il faut juste penser à utiliser l'objet qui convient et à vider la chaîne quand on a fini de s'en servir. J'ai mis du temps avant de y arriver parce que je n'ai pas trouvé d'exemple mettant ceci en évidence. Mais bon:


    unsigned long int x,y;
    ostringstream oss;

    for (x=0,y=50;x<100;++x)
    {
    chaine << " x vaut " << x << " et y vaut" << y;
    cout << chaine;
    oss.str("");
    }


    Le compte est bon.
    • [^] # Re: Des strings et des lettres

      Posté par  . Évalué à 1.

      Merci je teste ca tout de suite ...
      • [^] # Re: Des strings et des lettres

        Posté par  . Évalué à 2.

        Update: « chaine » et « oss » sont en fait le même objet. J'ai écrit trop vite. « oss » est le nom que j'utilise habituellement quand je déclare un ostringstream. J'ai fait un copier-coller un peu rapide du code en tête de page au milieu de tout ça.
  • # boost.format

    Posté par  (site web personnel) . Évalué à 1.

    Il y a l'approche de boost.format, qui surcharge l'operateur % (un peu comme en python) et qui reprend les regles de formatage de printf pour les int, double etc.

    http://www.boost.org/libs/format/doc/format.html(...)
    • [^] # Re: boost.format

      Posté par  (site web personnel) . Évalué à 1.

      À noter que c'est type-safe, et que boost.format permet de spécifier les positions des arguments, et non pas les types associées.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.