begin process at 2012 05 29 18:09:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

pb de conversion de chaine de caractéres


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pb de conversion de chaine de caractéres

vendredi 1 février 2002 à 11:02:14 | pb de conversion de chaine de caractéres

Thanatos

Membre Club
Bonjour,

Je désirerais faire un programme sur les fonctions logiques de base : un utilisateur rentre une fonction logique et le programme lui sort la table de vérité. Comment faire pour convertir une chîne de caractéres en une fonction logique c'est à dire la chaine "a+b" devient le nombre a+b .
Merchi
vendredi 1 février 2002 à 11:21:38 | Re : pb de conversion de chaine de caractéres

Croqmort

tu veut une methode compliquer qui marche a tout les couts ou une methode simple ?

-------------------------------
Réponse au message :
-------------------------------

Bonjour,

Je désirerais faire un programme sur les fonctions logiques de base : un utilisateur rentre une fonction logique et le programme lui sort la table de vérité. Comment faire pour convertir une chîne de caractéres en une fonction logique c'est à dire la chaine "a+b" devient le nombre a+b .
Merchi
vendredi 1 février 2002 à 17:32:04 | Re : pb de conversion de chaine de caractéres

idk

Je suis egalement en train de la faire pour un editeur d'equation! Mauis j'ai u, pote qui a fait la fonction! Trop simple sa fonction a utilisé! Plus dur a comprendre!
Ecris lui :blustuff@wanadoo.fr

vendredi 1 février 2002 à 21:48:48 | Re : pb de conversion de chaine de caractéres

Croqmort

bon alors voila deja 2 methode, mais j'en ai aussi une qui permet de faire par exemple : " 5 + 8 * 2 -6+5 -3" mais elle ne gere pas les priorité d'operation !
attention les codes sources sont assez big
methode simple :

#include <stdio.h>

#define ADDITION 1
#define SOUSTRACTION 2
#define MULTIPLICATION 3
#define DIVISION 4

bool EstChiffre(const char &c);
bool Extraire(int &a,int &b,unsigned char &type,const char *src);
bool Extraire2(int &a,int &b,unsigned char &type,const char *src);
int typecar(char c);
int ouep(int pos,char c);

char etat[] = {0,0,0,0,
1,2,0,0,
3,2,4,0,
3,0,4,0,
5,6,0,0,
5,6,0,0,
7,6,7,7,
0,0,0,0
};

void main(){
int a,b;
unsigned char type;
char *calcul = "54+89";
printf("Calcul de : %s\n",calcul);
if(!Extraire(a,b,type,calcul)){
printf("Erreur dans les donnees !\n");
return;
};
printf("Extraction des donnees, a=%d, b=%d\n",a,b);
switch(type){
case ADDITION:
printf("addition ... %d + %d = %d\n",a,b,a+b);
break;
case SOUSTRACTION:
printf("soustraction ... %d - %d = %d\n",a,b,a-b);
break;
case MULTIPLICATION:
printf("multiplication ... %d * %d = %d\n",a,b,a*b);
break;
case DIVISION:
if(b == 0){
printf("division par zero\n");
break;
}
printf("division ... %d / %d = %d\n",a,b,a/b);
break;
}
}

bool Extraire(int &a,int &b,unsigned char &type,const char *src){
int i=0;
a = 0;
b = 0;
type = 0;
if(!EstChiffre(src[i])) return false;
while(EstChiffre(src[i]))
a = a*10 + (src[i++]-'0');

switch(src[i++]){
case '+':
type = ADDITION;
break;
case '-':
type = SOUSTRACTION;
break;
case '*':
type = MULTIPLICATION;
break;
case '/':
type = DIVISION;
break;
default:
return false;
}

if(!EstChiffre(src[i])) return false;
while(EstChiffre(src[i]))
b = b*10 + (src[i++]-'0');

return true;
}

bool EstChiffre(const char &c){
if((c<'0')||(c>'9')) return false;
return true;
}

methode complexe :

si tu veux qu'on puisse mettre plein d'espace il faut utilisé la methode complexe :

alors pour la methode complexe en fait je vais utilisé un automate qui va analysé la chaine
de caractere.

il faut deja que l'on divise notre chaine en plusieur partie imaginons la chaine suivante :
( les '_' representent les espaces)
"__75_+___63"
il est composé de 6 partie :
partie 1 : "__" les espaces devant
partie 2 : "75"
partie 3 : "_" l'espace avant l'operateur
partie 4 : "+" l'operateur
partie 5 : "___" l'espace aprés l'operateur
partie 6 : "63"
ce qui fait 6 etats + l'etat de fin (7) et l'etat d'erreur (0)

et en fait on va decomposé ça en un tableau :
les lignes indique les etats et les colones corresponde à un type de caractere
(espace - chiffre - operateur - autre)
0 : 0 - 0 - 0 - 0 // cet etat c'est la partie erreur
1 : 1 - 2 - 0 - 0
2 : 3 - 2 - 4 - 0
3 : 3 - 0 - 4 - 0
4 : 5 - 6 - 0 - 0
5 : 5 - 6 - 0 - 0
6 : 7 - 6 - 7 - 7
7 : 0 - 0 - 0 - 0 // cet etat sert a indiquer a l'automate la fin du traitement
donc en fait les numeros dans le tableau indique le prochain etat en fonction du caractere
et de l'etat actuel

code :

#include <stdio.h>

#define ADDITION 1
#define SOUSTRACTION 2
#define MULTIPLICATION 3
#define DIVISION 4

bool EstChiffre(const char &c);
bool Extraire(int &a,int &b,unsigned char &type,const char *src);
int typecar(char c);
int ouep(int pos,char c);

char etat[] = {0,0,0,0,
1,2,0,0,
3,2,4,0,
3,0,4,0,
5,6,0,0,
5,6,0,0,
7,6,7,7,
0,0,0,0
};

void main(){
int a,b;
unsigned char type;
char *calcul = " 54 + 89";
printf("Calcul de : %s\n",calcul);
if(!Extraire(a,b,type,calcul)){
printf("Erreur dans les donnees !\n");
return;
};
printf("Extraction des donnees, a=%d, b=%d\n",a,b);
switch(type){
case ADDITION:
printf("addition ... %d + %d = %d\n",a,b,a+b);
break;
case SOUSTRACTION:
printf("soustraction ... %d - %d = %d\n",a,b,a-b);
break;
case MULTIPLICATION:
printf("multiplication ... %d * %d = %d\n",a,b,a*b);
break;
case DIVISION:
if(b == 0){
printf("division par zero\n");
break;
}
printf("division ... %d / %d = %d\n",a,b,a/b);
break;
}
}

bool EstChiffre(const char &c){
if((c<'0')||(c>'9')) return false;
return true;
}


bool Extraire(int &a,int &b,unsigned char &type,const char *src){
int pos = 1;
a = 0;
b = 0;
type = 0;
char c;
while(pos != 0){
c = *src++;
pos = ouep(pos,c);
switch(pos){
case 2:
a = a*10 + (c-'0');
break;
case 4:
if(c=='+') type = ADDITION;
if(c=='-') type = SOUSTRACTION;
if(c=='*') type = MULTIPLICATION;
if(c=='/') type = DIVISION;
break;
case 6:
b = b*10 + (c-'0');
break;
case 7:
return true;
case 0:
return false;
}
}
return false;
}

int ouep(int pos,char c){
return etat[typecar(c)+pos*4];
}

int typecar(char c){
if(c==' ') return 0;
if(EstChiffre(c)) return 1;
if((c=='+')||(c=='-')||(c=='*')||(c=='/')) return 2;
return 3;
}

voila j'espere que c'est ce que tu veux.
si tu veux une source qui permet de faire "a + b + c + d + e ..." tu le dit et je la met aussi !

-------------------------------
Réponse au message :
-------------------------------

tu veut une methode compliquer qui marche a tout les couts ou une methode simple ?

-------------------------------
Réponse au message :
-------------------------------

Bonjour,

Je désirerais faire un programme sur les fonctions logiques de base : un utilisateur rentre une fonction logique et le programme lui sort la table de vérité. Comment faire pour convertir une chîne de caractéres en une fonction logique c'est à dire la chaine "a+b" devient le nombre a+b .
Merchi

lundi 4 février 2002 à 12:28:49 | Re : pb de conversion de chaine de caractéres

Thanatos

Membre Club
merci bcp pour tes 2 méthodes.


Cette discussion est classée dans : pb, programme, chaine, conversion, caractéres


Répondre à ce message

Sujets en rapport avec ce message

Conversion de chaine en entier [ par JMGR ] Comment peut - on convertir une chaine qui contient par exemple "25" en entier ?Exemple :char texte[256]="25";int nombre;nombre = texte; //Erreur...< PB DE CHAINE DE CARACTERE [ par Orkblutt ] pkoi ceci me genere t'il une erreur a l'execution??#include void main(){ int o; o=2000; char* O=new char; itoa(o,O,10); char* ch="Fichier"; strcat(ch, PB DE CHAINE DE CARACTERE [ par Orkblutt ] pkoi ceci me genere t'il une erreur a l'execution??#include void main(){ int o; o=2000; char* O=new char; itoa(o,O,10); char* ch="Fichier"; strcat(ch, PB:[TURBO C++]charger une image (bmp ou jpg) et l'afficher [ par kobee12 ] depuis quelque temps j'essaie de trouver un programme qui me permettrait d'afficher une ou plusieurs images en utilisant GRAPHICS.H avec TURBO C++.Seu Pb de compilation [ par Cyberboy2054 ] Salut J' ai un piti problème de compilation en C++Quand j' ai terminé mon programme (un aplication console)je teste mon programme depuis le compilateu conversion de date [ par CHENRY ] En VC++ 6.0 avec les MFC.Pour convertir une date en chaine, j'ai bien trouvé la propriété MaChaine = MaDate.Format(0, LANG_USER_DEFAULT)mais pour conv Pb de reallocation d'un tableau de chaine de caracteres [ par kobee12 ] J'ai un petit probleme. En effet j'ai un tableau defini de la maniere suivante : char* tab[12];Je charge des chaines de caracteres dans mon tableau. E Pb pour faire appel à un programme externe avec MFC [ par jujunio ] Bonjour, Mon prob est le suivant. j'ai réalisé un exécutable en C++.Et plutot que de tout refaire en MFC, je voudrais faire appel au programme.exe en pb programme très très simple [ par surfeurnet ] voila il s'agit d'un programme très simple qui ne fait pas d'erreurs à la compilation avec dev-cpp mais qui plante quand je l'exécute :#include char n question existencielle [ par knubie ] il existe des programme comme artmoney qui permete de trouver des chaine de charactere des entier des floatant et des chaine de charactere dans la me


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales