Rechercher : dans
Par :

Mini probleme(programmation en C)

Dernière réponse le 24 fév 2008 à 16:56:06 Selia, le 29 mar 2006 à 14:38:06 
 Signaler ce message aux modérateurs

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,
@+

1

mamiemando, le 29 mar 2006 à 16:19:32

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

Répondre à mamiemando

2

Selia, le 29 mar 2006 à 18:11:20

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.

Répondre à Selia

3

mamiemando, le 30 mar 2006 à 09:53:00

#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 ;
}

Répondre à mamiemando

4

Selia, le 30 mar 2006 à 12:50:27

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.

Répondre à Selia

5

mamiemando, le 30 mar 2006 à 13:47:09

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

Répondre à mamiemando

6

Selia, le 7 avr 2006 à 14:43:35

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 ;
} }

Répondre à Selia

7

mamiemando, le 7 avr 2006 à 16:58:06

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.

@+

Répondre à mamiemando

8

Selia, le 7 avr 2006 à 17:32:24

Le programme se compile mais il ne s'execute pas ;
alors ?
c'est quoi le proleme?
merci

Répondre à Selia

9

 mamiemando, le 8 avr 2006 à 00:36:21
Répondre à mamiemando