Posez votre question Signaler

Mini probleme(programmation en C) [Résolu]

Selia 15Messages postés 29 mars 2006Date d'inscription - Dernière réponse le 8 avril 2006 à 00:36
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,
@+
Lire la suite 

Mini probleme(programmation en C) »

9 réponses
Réponse
+0
moins plus
En t'inspirant de :
http://www.cppfrance.com/code.aspx?ID=10851
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
Selia - 29 mars 2006 à 18:11
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 : http://www.cppfrance.com/code.aspx?ID=10851
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.
Ajouter un commentaire
Réponse
+0
moins plus
#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 ;
}
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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
Selia - 7 avril 2006 à 14:43
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 ;
} }
Ajouter un commentaire
Réponse
+0
moins plus
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.

@+
Selia - 7 avril 2006 à 17:32
le programme se compile mais il ne s'execute pas ;
alors ?
c'est quoi le proleme?
merci
Ajouter un commentaire
Réponse
+0
moins plus
http://www.commentcamarche.net/forum/affich-2182828-convertion-en-c
Ajouter un commentaire
Ce document intitulé « mini probleme(programmation en C) » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook