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

C++ Discussion :

comment je peux nettoyer le contenu de atoi()


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 187
    Par défaut comment je peux nettoyer le contenu de atoi()
    bonjour
    j'ai fait une boucle qui à chaque fois elle convertit une chaine ch[i] à un entier mais je veux qu'après 4 fois , elle s'initialise à nouveau , est-ce que quelqu'un peut m'aider, merci

    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
     
     
    while(j>=0)
     {
            prec=j-4;
        while(j!=prec)
         {
             entier=atoi(& ch[j] );
             compteur++;
             j--;
         }
         if(compteur==4)
         {
          compteur=0;
            InsFin(entier);
    }

  2. #2
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Salut, peux-tu expliquer plus précisément ce que tu veux faire?

    Par exemple, à quoi tu fais appel pour initialiser ta chaine, et quel est le but de l'algorithme?

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 187
    Par défaut
    Bonjour Coyotte
    l'algorithme reçoit une chaîne par exemple "277377636638373", convertit chaque lettre ch[j] en un entier , puis il regroupe chaque nombre constitué de 4 chiffre dans une liste chainée : InsFin(entier);

    le problème c'est que atoi() se souvient du dernier entier par exemple 8373, je veux qu'après chaque 4 boucle elle s'initialise à nouveau c'est à dire lui affecter 0 pour pouvoir faire le traitement sur 3663

    j'espere que tu as compris mon problème

  4. #4
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Je ne suis pas sûr de très bien comprendre.

    Par exemple ce code:

    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
    #include <iostream>
    using std::cout;
    using std::endl;
     
    int main()
    {
      const char *a= "1277377636638373";
      int len = strlen(a);//longueur de a
     
      for (int i = len - 4; i >= 0; i-=4)
      {
          char temp[5];
          strncpy(temp, &a[i], 4); //on copie les 4 caractères de a qui nous intéressent
          cout << "entier: " << atoi(temp) << endl;
      }
      return 0;
    }
    Est-il dans l'esprit de ce que tu veux?

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    tu trouveras plus d'aides sur le forum C

  6. #6
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    En fait , atoi ne garde rien en mémoire.

    Elle convertit juste un char* en int, en prenant le maximum de chiffres du char*.

    Peut-être que tu as une confusion à ce niveau-là.

  7. #7
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Ouai atoi() c'est purement du C... c'est pas forcément le forum le plus approprié.

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

    Informations professionnelles :
    Activité : aucun

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

    De manière générale, sur le forum C++, j'aurais tendance à conseiller de recourir aux possibilités offertes par le C++, à savoir:
    • L'utilisation de la classe string (disponible dans l'espace de noms std par inclusion du fichier d'en-tête <string>) pour tout ce qui a trait à la gestion de chaines de caractères
    • L'utilisation des flux partout où c'est nécessaire (dont principalement les flux de conversions *stringstream, également disponibles dans l'espace de noms std par inclusion du fichier d'en-tête <sstream>).

    Ainsi, un code C++ qui devrait, si j'ai bien compris ton problème, te donner un résultat "sympa" pourrait être quelque chose de proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    std::string str="1277377636638373";
    for(size_t i = 0;i<str.size(); i+=4)
    {
        std::stringstream ss;
        ss<<str[i]<<str[i+1]<<str[i+2]<<str[i+3];
        int recup;
        ss>>recup;
        //utilisation de recup par ailleurs
    }
    Simple et efficace

    [EDIT]Une alternative qui pourrait s'avérer sympa est de commencer par créer une collection des "sous chaines" qui vont bien, sous une forme sans doute proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    std::string str="1277377636638373";
    size_t pos = 0;
    std::vector<std::string> tabstring;
    while(pos< str.size())
    {
        tabstring.push_back(str.substr(pos,4));
        pos+=4;
    }
    D'utiliser ces sous chaines tant que tu n'a pas besoin de manipuler les valeurs numériques qu'elles représentent (pour faire des calculs, principalement), ou de recourir aux flux de conversions en cas de besoin...

    La conversion pouvant prendre, au choix l'une des formes parmi:
    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
    /* premier exemple */
    std::stringstream ss;
    ss<<tabstring[n];
    int recup;
    ss>>recup;
    /* un exemple permettant de récupérer toutes les valeurs dans l'ordre */
    std::vector<int> tabint;
    for(std::vector<std::string>::iterator it = tabstring.begin();
        it!=tabstring.end(); ++it)
    {
        std::stringstream ss;
        ss<<(*it);
        int recup;
        ss>>recup;
        tabint.push_back(recup);
    }
    /* et il y a surement encore un tas de manières sympa :D */
    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

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    boost::lexical_cast<>() sinon

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

Discussions similaires

  1. Comment je peux afficher le contenu de ma base de données
    Par HMFouad dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 22/05/2012, 10h20
  2. Réponses: 10
    Dernier message: 28/12/2007, 16h58
  3. [TP]Comment je peux creer un bouton avec Pascal ?
    Par JaVaCode dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 06/12/2004, 18h28
  4. Comment je peux changer nom de 'Table' avec la phrase sql
    Par YEK dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/10/2004, 08h38
  5. Réponses: 3
    Dernier message: 25/07/2002, 10h42

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