Test contenu d'une chaine de caractère

Signaler
Messages postés
15
Date d'inscription
vendredi 14 novembre 2008
Statut
Membre
Dernière intervention
24 octobre 2009
-
Messages postés
3
Date d'inscription
lundi 1 juin 2009
Statut
Membre
Dernière intervention
8 juin 2009
-
bonjour, j'aimerai approfondir une fonction, c'est à dire je possède uen chaine de caractère ici : ChaineRéponse, j'aimerai pouvoir tester son contenu à savoir:
si c'est un entier
si c'est une chaine de caractère
si c'est une formule ( la formule est reconnaissable grâce à la parenthèse ouvrante et fermante:

voici mon code

void gereBoutonGrille(int ligne, int colonne)
{   double valeur=0;

    char* ChaineReponse;
    char ChaineTexte[50];
    int res = 0;
   
    ChaineReponse = grilleGetText(ligne, colonne);
    printf("gereBoutonGrille (ligne=%d  colonne=%d contenu=%s)\n", ligne, colonne, ChaineReponse);

    printf("gereBoutonGrille (ligne=%d  colonne=%d)\n", ligne, colonne);
    sprintf(ChaineTexte, "ligne %d : colonne %d", ligne, colonne);

    res = dialogSaisieChaine("Saisir le contenu", ChaineTexte, &ChaineReponse);
    if(res == rVALIDER)
    {
        printf("chaine saisie : %s\n", ChaineReponse);
       "ici je dois mettre mon test", mais je ne vois pas comment faire!!!

printf("chaine saisie : %lf\n",     valeur );
        grilleSetText(ligne, colonne, ChaineReponse);
        free(ChaineReponse);
    }
}

merci d'avance de votre réponse

3 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
bof tu peux faire ça de plusieurs façons, en fonction de ce qui t'arrange le mieux;
par exemple (on teste la chaîne str) :

test entier :
char*loc;
for(loc=str;*loc;loc++)
if((*loc<'0')||(*loc>'9')) break;
if(*loc){pas un entier;}

test formule :
char*loc;
if(*str!='(')){pas une formule;}
for(loc=str;*loc;loc++);
if(*(loc-1)!=')'){pas une formule;}

après évidemment faudra que tu affines en fonction de ce qui est une formule autorisée etc...
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Désolé.

test entier :
char*loc;
for(loc=str;*loc;loc++)
if((*loc<'0')||(*loc>'9')) break;
if(*loc){pas un entier;}

test formule :
char*loc;
if(*str!='(')){pas une formule;}
for(loc=str;*loc;loc++);
if(*(loc-1)!=')'){pas une formule;}

après évidemment faudra que tu affines en fonction de ce qui est une formule autorisée etc...
Messages postés
3
Date d'inscription
lundi 1 juin 2009
Statut
Membre
Dernière intervention
8 juin 2009

#include <stdio.h>
#include <ctype.h>

#define NOMBRE 1
#define FORMULE 2
#define CHAINE 3

int function(const char* s)
{
    // il peut y avoir des espaces, on les ignorent
    while (isspace(*str))
    {
        ++str;
    }

    // si chiffre (0-9)
    if (isdigit(*str))
    {
        puts("nombre");
        return NOMBRE;
    }

    // peut-être une formule mathématique ou autre
    if (*str == '(')
    {
        puts("possible formule");
        return FORMULE;
    }

    // sinon, une simple chaine de caractères (par défaut)
    puts("chaine");
    return CHAINE;
}

note: simple & basic, à adapter selon les besoins ...