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 :

Addtion des nombres dans une chaine


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Addtion des nombres dans une chaine
    salut tout le monde !!
    donc j'ais un problème sur les chaines
    EX: "12+20+4" la fonction retournera 36
    ms je n'arrive pas le faire
    et merci

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 564
    Points : 7 640
    Points
    7 640
    Par défaut
    Bonjour,

    Il faut parcourir la chaîne de caractères pour en extraire les constituants
    transformer ceux-ci en nombre si nécessaire.
    Et traiter les commandes.
    La séparation des constituants : "12", "+", "20", "+" et "4"
    Si le format est connu et fixe (3 nombres séparés par des +), un simple sscanf( buffer , "%d%d%d" , &nb1 , &nb2, &nb3 ); trouve les 3 nombres à ajouter, car le + est un séparateur naturel de nombres!
    Sinon c'est beaucoup plus complexe.
    Il faut parcourir chacun des caractères et analyser si c'est un chiffre ou un symbole.
    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
    27
     
    int valeurCourante = 0;
    enum OperationEnCours { Plus, Moins } = Plus;
     
    for ( int i = 0 ; i < strlen(buffer) ; ++i )
    {
        if ( buffer[i] >= '0' && buffer[i] <= '9' )
        {
            // c'est un nombre rechercher la fin du nombre
            // puis extraire le nombre
        }
        else if ( buffer[i] == '+' )
        {
            // effectuer l'opération en cours
            // la prochaine opération à faire sera une addition
        }
        else if ( buffer[i] == '-' )
        {
            // effectuer l'opération en cours
            // la prochaine opération à faire sera une soustraction
        }
        else
        {
            puts("erreur caractère inattendu!");
        }
    }
     // finir en effectuant la dernière opération en attente

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    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
    int additionstr(char *ch)
    {
        int a,s,c;
        char *p,*q,*m;
        s=0;
        m=ch;
        while(*m)
        {
          for(p=m;(*p!='+')&&(*p);p++);
          c=1;
          for (q=p-1;(*q!='+');q--)
           {
               s+=((*p)-48)*c;
               c=c*10;
           }
     
          m=p;
          m++;
           return s;
     
        }

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    j'ais essayé de la faire avec les pointeur mais je n'arrive pas a le faire vous pouvez me dire c quoi ma faute ???

  5. #5
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    L'analyse d'une chaîne selon une grammaire donnée est typiquement implémentée avec un automate.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    voila le code avec switch mais ça marche pas je sais pas pourquoi



    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
    27
    28
    int addstr(char *ch)
    {
        int s,c,i,etat;
        etat=1,s=0,c=1;
        for(i=0;i<strlen(ch);i++);
      while (i>=0)
      {
        switch(etat)
        {
            case 1 :
           while((ch[i]!='+') && (i>=0))
           {
            s+=(ch[i]-48)*c;
            c=c*10;
            i--;
           }
            etat =0;
            break;
     
           case 0 :
            c=1;
            i--;
            etat =1;
            break;
        }
      }
      return s;
    }

  7. #7
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Fais un effort de clarté, s'il-te-plaît, ce n'est pas un concours d'obfuscation. Commentaires, descriptions, préconditions.. À quoi correspondent les valeurs d'état (énumération..?) ?

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    voilà le code final merci beaucoup pour votre aide

    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
    27
    28
    29
     
    int addstr(char *ch)
    {
        int s,c,i,etat;
        etat=1,s=0,c=1;
        for(i=0;i<strlen(ch);i++);
      while (i>=0)
      {
        switch(etat)
        {
            case 1 :
           while((ch[i]>='0' && ch[i]<='9') && (i>=0))
           {
            s+=(ch[i]-48)*c;
            c=c*10;
            i--;
           }
            etat =0;
            break;
     
           case 0 :
            c=1;
            i--;
            etat =1;
            break;
        }
      }
      return s;
    }

  9. #9
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 564
    Points : 7 640
    Points
    7 640
    Par défaut
    C'est en effet complexe.

    Dès la première boucle,
    for(i=0;i<strlen(ch);++i); est équivalente à i =strlen(ch); !
    tu cherches certainement le dernier caractère, il faudrait faire : i = strlen() - 1;,

    Ensuite, cela semble pas mal, mais il a trop variables difficiles à identifier.

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

Discussions similaires

  1. Extraire des nombres dans une chaine de caractère
    Par fxfxfx dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 27/05/2013, 10h41
  2. changer des nombres dans une chaine
    Par newbiegeek dans le forum ASP
    Réponses: 11
    Dernier message: 09/08/2007, 15h24
  3. Réponses: 3
    Dernier message: 31/01/2005, 23h18
  4. [langage] compter des caracteres dans une chaine
    Par louisis dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 22h39
  5. [LG]Extraire des nombres d'une chaine
    Par audreym31 dans le forum Langage
    Réponses: 4
    Dernier message: 18/01/2004, 21h24

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