Mini probleme(programmation en C)

Résolu
Selia Messages postés 15 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
salut a tous?
j'ai dis un mini probleme , j'espere qu'il est mini mini tout rikiki, et maintenant a vous de voir:
en fait j'aimerais savoir comment faire pour transformer (convertir) une chaine de caractere en un tableau sachant que j'ai pas exemple des opperateurs (ou des caracteres non transformable)dans la chaine,
exemple:6*3e2+5
(bien sur je dois mettre des vides a la place des opperateurs ) mais comment faire ?!
je sais que je peux le faire avec la fonction atof , mais comment?!!!j'ai essaillé plein de trucs mais ça na marche pas! (je me suis surement tromper quelque part)

alors je vous dis merci d'avance, un grand MERCI a tous ceux qui pourront me repondre positivement,
@+

6 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    En t'inspirant de :
    https://codes-sources.commentcamarche.net/
    et en prenant pour délimiteur "*-+/eE", tu pourras extraire chaque nombre dans une chaine, que tu pourras ensuite mettre dans un tabealu à l'aide du fameux atof. Mais pour que atof marche il ne faut que la chaîne ne contienne qu'un nombre et rien d'autre !

    Bonne chance
    0
    1. Selia Messages postés 15 Statut Membre
       
      bein honnetement je n'ai pas vraiment saisis votre truc:
      comment prendre "/*-+" comme delimiteurs?!!!!!!!!!
      et puis je ne vois pas vraiment le rapport entre le site : https://codes-sources.commentcamarche.net/
      et mon probleme, car je dois demander (dans mon programme) a ce qu'on donne une expression (à calculer)à chaque fois ;
      donc je n'ai pas qu'un seul cas à traiter mais plusieurs(j'ai besion d'un cas general),

      j'espere que vous pourrrais m'aider,

      HELP
      please, i need your help;
      i hope you'll give me a solution to this probleme.

      Selia.
      0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(){
        char *pointeur;
        char *separateur = { "*-+/eE" }; // Le séparateur
        char *buffer;
        char *Chaine_Entrante="2.56e-8*3.14";
        int nb_mot=1;
    
        buffer = strdup ( Chaine_Entrante );
    
        // premier appel,
        pointeur = strtok( buffer, separateur );
        printf ("Mot de la phrase numero : %d %s\n",nb_mot, pointeur);
    
        while( pointeur != NULL )
        {
            // Cherche les autres separateur
            pointeur = strtok( NULL, separateur );
            if ( pointeur != NULL )
            {
                nb_mot++; // increment du nombre de mot
                printf ("Mot de la phrase numero : %d %s\n",nb_mot, pointeur);
                //faire le atof ici
            }
        }
    
        getchar (); // pause en mode console
    
        return 0 ;
    }
    0
  3. Selia Messages postés 15 Statut Membre
     
    mille merci :-)

    j'ai pas pu faire se que je voulais faire(mettre les valaurs dans un tableau) ,mais bon,
    en tout cas grace a vous j'ai appris quelque chose;

    merci;
    Selia.
    0
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Ben il suffit juste de faire :

        double tab[255];
        ...
        while( pointeur != NULL )
        {
            // Cherche les autres separateur
            pointeur = strtok( NULL, separateur );
            if ( pointeur != NULL )
            {
                tab[nb_mot]=aotf(pointeur);
                nb_mot++; // increment du nombre de mot
            }
        }
        ...
    

    Non ?

    Bonne chance
    0
    1. Selia Messages postés 15 Statut Membre
       
      bjr merci de m'aider mais j'aimerai juste savoir pourquoi, le tableau affiche la premiere valeur selement (2.56)
      merci,
      le programme:

      #include <stdlib.h>
      #include <stdio.h>
      #include <string.h>

      int main(){
      double tab[255];
      char *pointeur;
      char *separateur = { "*-+/eE" }; // Le séparateur
      char *buffer;
      char *Chaine_Entrante="2.56e-8*3.14";
      int nb_mot=1;

      buffer = strdup ( Chaine_Entrante );

      // premier appel,
      pointeur = strtok( buffer, separateur );
      printf ("Mot de la phrase numero : %d %s\n",nb_mot, pointeur);

      while( pointeur != NULL )
      {
      // Cherche les autres separateur
      pointeur = strtok( NULL, separateur );
      if ( pointeur != NULL )
      {
      tab[nb_mot]=atof(pointeur);
      nb_mot++; // increment du nombre de mot
      }
      getchar (); // pause en mode console

      return 0 ;
      } }
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Ton return 0 n'était pas dans le bon bloc. Après correction ça donne :
    #include <stdio.h>
    #include <string.h>
    
    int main(){
        double tab[255];
        char *pointeur;
        char *separateur = { "*-+/eE" }; // Le séparateur
        char *buffer;
        char *Chaine_Entrante="2.56e-8*3.14";
        int nb_mot=0;
    
        buffer = strdup ( Chaine_Entrante );
    
        // premier appel,
        pointeur = buffer;
    
        pointeur = strtok(buffer,separateur);
        if ( pointeur != NULL )
        {
            tab[nb_mot]=atof(pointeur);
            ++nb_mot; // increment du nombre de mot
            printf ("Mot de la phrase numero : %d %s\n",nb_mot, pointeur);
        }
    
        while( pointeur != NULL )
        {
            // Cherche les autres separateur
            pointeur = strtok( NULL, separateur );
            if ( pointeur != NULL )
            {
                tab[nb_mot]=atof(pointeur);
                ++nb_mot; // increment du nombre de mot
                printf ("Mot de la phrase numero : %d %s\n",nb_mot, pointeur);
            }
        }
        return 0 ;
    }
    

    Le 1er élément est stocké dans la case 0, le second dans la case 1 etc...

    Pour bien faire tu peux mettre le bloc if(pointeur!=NULL){ ... } dans une fonction corrigeant nbmot et tab... Cf cours sur les pointeurs.

    @+
    0
    1. Selia Messages postés 15 Statut Membre
       
      le programme se compile mais il ne s'execute pas ;
      alors ?
      c'est quoi le proleme?
      merci
      0