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

Meilleures réponses pour « mini probleme(programmation en C) » dans :
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
Langage C - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C sont typées, c'est-à-dire que les données contenues dans...
Caractéristiques du langage C VoirLe fichier source Le fichier source d'un programme écrit en langage C est un simple fichier texte dont l'extension est par convention .c. Note d'un visiteur (J.Grondin) : L'extension est en minuscules. Le .C (majuscule) est interprété par...

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