Conversion du type caractere
Voila, j'ai écris un petit programme qui devrait me permettre de convertir une chaine de caractères en un type réel,
je dois convertir cette chaine la par exemple:
"0.2/5+0.56/10.1"
donc je dois en sortir le 0.2 le 5 le 0.56 et le 10.1
donc cette chaine est de forme " réel/ (réel ou entier) + réel / (réel ou entier)....."
Quand je compile le programme il n y a aucun probleme, mais lors de l'execution, que se soit sur visual c++ ou bien c++builder, le meme probleme se pose:
un message d'erreur
celui de builder me dit: "Project1.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."
et a peu pres la meme chose en anglais avec visual.
voila mon programme:
une fonction qui me permet de savoir si c'est de type entier ou réel:
Code:
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 30 31 32 33 34 35 36 37
|
#pragma hdrstop
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//Fonction qui renvoit le type de la chaine de caractère
int type_chaine (char *t)
{ bool trouve=false ;
char *nptr;
nptr=t;
while (*nptr!='\0' && !trouve )
{
if (*nptr=='/')
trouve =true ;
nptr++;
}
if (trouve)
return (2);
else
{ nptr=t;
while (*nptr!='\0' && !trouve)
{
if (*nptr=='.')
trouve =true ;
nptr++;
}
if (trouve) return (1);
else return (0);
}
}; |
Ma fameuse fonction de conversion:
Code:
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
// Fonction de conversion
void convert_POSS (char *t)
{
int type;
float resultat[40];
float puiss;
//int sign=1;
int i;
char *nptr=t;
//if (*nptr =='-') sign = -1;
//if ((*nptr=='-') || ( *nptr=='+')) nptr++;
while (*nptr!='\0')
{
i=0;
while (*nptr!='.')
{
resultat[i]=resultat[i]*10+*nptr -48;
nptr++;
}
nptr++;
puiss=10;
while (*nptr!='/')
{
resultat[i]=resultat[i]+(*nptr-48)/puiss;
puiss*=10;
nptr++;
}
// resultat[i]=resultat[i]*sign;
nptr++;
i++;
type=type_chaine(t);
if (type==1)
{
while (*nptr!='.')
{
resultat[i]=resultat[i]*10+*nptr -48;
nptr++;
}
nptr++;
puiss=10;
while (*nptr!='+')
{
resultat[i]=resultat[i]+(*nptr-48)/puiss;
puiss*=10;
nptr++;
}
}
else
{
while (*nptr!='+')
{
resultat[i]= resultat[i]* 10 + *nptr - 0x30;
nptr++;
}
}
// resultat[i]=resultat[i]*sign;
nptr++;
i++;
}
// return (resultat);
} |
et enfin l'appel de cette fonction:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
#pragma argsused
int main(int argc, char* argv[])
{
char a [40];
char *ptr =a;
int l,i;
l=1;
float resultat [40];
while (l!=0)
{
cout << "donner la chaine : ";
cin >> a;
convert_POSS(ptr);
for(i=0;i<40;i++)
cout << resultat[i] <<endl;
cout << "voulez vous continuez (0,1) : ";
cin >> l;
}
return 0;
} |
J'espere que vous allez m'aider a résoudre ce problème!!!!
Merci..