IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Formater un char à partir d'un numéro composé


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Par défaut Formater un char à partir d'un numéro composé
    Bonjour,

    Je récupère la valeur numérique d'une touche tapée sur un pavé numérique, et comme pour un numéro de téléphone composé j'ai besoin d'ajouter au fur à mesure le numéro tapé à ma chaine correspondant au numéro complet.
    Je dois impérativement avoir à la fin avoir un char* de 16 caractères de cette forme :
    " 123456" les 10 1ers car étant des espaces
    dans cet ex, le 1er chiffre tapé est le 1, le 2eme le 2 et ainsi de suite ...

    historique :
    " 1" et 15 espaces devant
    " 12" et 14 espaces devant
    " 123" et 13 espaces devant
    " 1234" et 12 espaces devant ....

    Aidez-moi SVP, je suis nulle en char, char* et char[] ....

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 126
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    Ce que vous dites ressemble à quelque chose comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    unsigned int compteur = 0;
    char numero[17] = "";
    while ( compteur != 16 )
    {
        numero[compteur] = {entrer du clavier numerique};
        compteur++;
    }
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    non LittleWhite, les espaces doivent être placés avant

    s'il faut le faire à chaque fois d'une touche est tapée (et non à la fin) il y a trois solutions :
    • décaler le contenu de la chaine à chaque tour
    • mémoriser la valeur dans un entier et fabriquer la chaine à chaque tour via un sprintf ou autre
    • utiliser un tableau plus grand et balader le pointeur donnant la chaine voulue

    la solution la plus efficace est bien sur la dernière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include <stdio.h>
    #include <string.h>
     
    int main(int, char **)
    {
      const int n = 16;
      char s[n*2 + 1];
     
      memset(s, ' ', n);
      s[n] = 0;
     
      char * result = s;	  // la chaine desiree
      char * insert = s + n;  // prochain caractere lu insere ici
     
      for (int i = 0; i != n; i += 1) {
        *insert++ = getchar();
        (void) getchar(); // ecarte le \n
        *insert = 0;
        result += 1;
     
        // verification
        printf("|%s|\n", result);
      }
     
      return 0;
    }
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  4. #4
    Membre éclairé Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Par défaut [RESOLU]
    merci j'ai gratté dans ce sens et c'est ok
    ya un bon tutos sur les char .. à chaque fois j'en bave ???

    a+

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Juste pour le plaisir des yeux, un left padding générique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template<typename C, typename Tr, typename Al>
    inline void left_padding(std::basic_string<C, Tr, Al> & s,
    	typename std::basic_string<C, Tr, Al>::size_type l, C c)
    {
    	if (s.length()<l)//padding left to l
    		s.insert(0u, l-s.length(), c);
    }
     
    ...
     
    std::string s="123456";
    left_padding(s, 16, ' ');

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Allez, ma petite méthode à la C++:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    int main()
    {
        std::string str="";
        for(int i=0;i<16;++i)
        {
            char c;
            cin>> c;
            str+=c;
            std::cout<<" la chaine est "
                     <<std::setw(16)        // 16 caractères de large
                     <<std::setfill(' ')    // les caractères non significatifs 
                                            // sont représentés par des espace
                     <<std::right           // et alignés à droite
                     <<str<<endl;
        }
        return 0
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/01/2007, 20h42
  2. [Date] Jour à partir de son numéro dans l'année
    Par boby123 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 22/11/2006, 16h58
  3. chercher une ip à partir d'un numéro de port
    Par shawty dans le forum C++
    Réponses: 3
    Dernier message: 08/11/2006, 23h34
  4. Réponses: 6
    Dernier message: 25/09/2006, 14h51
  5. Trouver le jour de l'année à partir de son numéro
    Par Nounours666 dans le forum C++Builder
    Réponses: 7
    Dernier message: 09/01/2006, 13h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo