reconnaissance d'un String
Répondre à la discussion
Affichage des résultats 1 à 27 sur 27

reconnaissance d'un String



  1. #1
    Claude-23

    reconnaissance d'un String


    ------

    Bonjour a tous.

    Pour apprendre le language C, je me suis recuperé un exercisse ou je doit reconnaitre, si l'entrée un "int", un "long" ou une "chaine" de charactères. J'aimerai bien connaitre l'argoritme pour faire le choix.
    Merci d'avance

    -----

  2. #2
    Jack
    Modérateur

    Re : reconnaissance d'un String

    je me suis recuperé un exercisse ou je doit reconnaitre, si l'entrée un "int", un "long" ou une "chaine" de charactères
    Tu peux reformuler car ça ne veux rien dire.

  3. #3
    pm42

    Re : reconnaissance d'un String

    Citation Envoyé par Jack Voir le message
    Tu peux reformuler car ça ne veux rien dire.
    Le titre permet de penser qu'il faut aussi faire la différence avec un caleçon :

  4. #4
    invite948b37db

    Re : reconnaissance d'un String

    Citation Envoyé par pm42 Voir le message
    Le titre permet de penser qu'il faut aussi faire la différence avec un caleçon :
    Définition de string :
    le seul instrument de musique à corde et à vent !

  5. A voir en vidéo sur Futura
  6. #5
    Claude-23

    Re : reconnaissance d'un String

    alors:

    J'ai 4 entrées diférantes:
    1.-le nombre d'entré, dans une entré j'ai:
    -une chaine de characteres (str),
    -un poid decimal (long)
    -et pour finir un Numero (int). (Un Paquet pour la poste)
    ils peuvent etre dans n'importe quel ordre.
    je dois suprimer la chaine de charactère, donner le N°, puis le poid.
    je voulais n'utiliser que 2 variables,

    1. Variable pour un for next
    2. Variable pour un If

    if estce un str oui suprimé
    est-ce un int oui garder
    est-ce un long oui garder
    metre en ordre
    rendre les données


    Excusez-mois pour mon charabia
    Dernière modification par Claude-23 ; 18/12/2016 à 02h23.

  7. #6
    Claude-23

    Re : reconnaissance d'un String

    Je ne demande pas une reponse complète, (pas encore)

    j'aimerai uniquement savoir comment avec if je pourrais reconnaitre la valeur de l'entrée
    Merci encore

  8. #7
    Jack
    Modérateur

    Re : reconnaissance d'un String

    C'est mieux, mais il reste encore des points pas très clairs:
    J'ai 4 entrées diférantes:
    1.-le nombre d'entré, dans une entré j'ai:
    -une chaine de characteres (str),
    -un poid decimal (long)
    -et pour finir un Numero (int). (Un Paquet pour la poste)
    C'est quoi le nombre d'entré(e)(es)? Le nombre d'adresses qui vont suivre? Un numéro qui s'incrémente à chaque entrée?

    Comment sont séparés les champs d'une entrée? Un ou plusieurs espaces, des caractères de séparation (; - etc)?

    Ce serait plus simple si tu donnais quelques exemples à traiter, tu ne trouves pas?

  9. #8
    Claude-23

    Re : reconnaissance d'un String

    Bonjour

    les entrées ce font les une après les autres, après les 3 groupes d'entrées il revient et demande le nombres de colis

    je recoit: un nombre de colis : 3
    1er tour
    : lyon
    : 456
    : 2.345

    ensuite 2e tour
    : 56
    : 23.568
    : paris
    3e. tour
    :
    : 6.543
    : 2834

    mon travail et de sortir:
    456, 2.35
    56, 23.57
    2834, 6.54

    cela pourrais tout aussi bien etre 5 ou 30 colis

  10. #9
    Jack
    Modérateur

    Re : reconnaissance d'un String

    Tu pourrais lire les item et les stocker dans une chaine avec la fonction fgets. Il faudra ensuite y lire les items avec sscanf en exploitant aa valeur de retour pour connaitre si le type de la variable était le bon.

  11. #10
    inviteb9f49292

    Re : reconnaissance d'un String

    Techniquement toutes tes entrées sont des tableaux de caractères, et c'est bien dans leur contenu que tu dois trouver un critère pour choisir quoi faire de la chaîne. Un critère pouvant être par exemple le type de caractères autorisées...

  12. #11
    Claude-23

    Re : reconnaissance d'un String

    J'aimerrais bien arrivé a cela:

    declaration de monNombre
    declaration de monEntier
    declaration de monLong
    1ere entré dans ma variable : if est-ce une chaine? oui, (je n'en veut pas)
    non suivant
    else if est-ce un entier? oui , dans 1er variable entier
    non suivant
    else if est-ce un long? oui,dans la 1er ariable long
    non suivant
    else Erreur.

  13. #12
    inviteab0c3c8c

    Re : reconnaissance d'un String

    Citation Envoyé par Claude-23 Voir le message
    J'aimerrais bien arrivé a cela:

    declaration de monNombre
    declaration de monEntier
    declaration de monLong
    1ere entré dans ma variable : if est-ce une chaine? oui, (je n'en veut pas)
    non suivant
    else if est-ce un entier? oui , dans 1er variable entier
    non suivant
    else if est-ce un long? oui,dans la 1er ariable long
    non suivant
    else Erreur.
    Bonjour,
    lou_ibmix_xi vous a mis sur la voie :
    Citation Envoyé par lou_ibmix_xi Voir le message
    Techniquement toutes tes entrées sont des tableaux de caractères, et c'est bien dans leur contenu que tu dois trouver un critère pour choisir quoi faire de la chaîne. Un critère pouvant être par exemple le type de caractères autorisées...
    Vous devez définir clairement les critères discriminants vos différents types d'entrées. Par exemple :
    1) Si l'entrée contient au moins un caractère alphabétique, alors il s'agit une chaine de caractère, donc une ville;
    2) Si l'entrée contient un point décimal, alors il s'agit un nombre décimal;
    3) Dans tous les autres cas, il ne peut s'agir que d'un entier.

    Cordialement

  14. #13
    Ikhar84
    Animateur Informatique

    Re : reconnaissance d'un String

    Bonjour,
    Je serais curieux de connaître tes définitions de long et de entier.

    Et de comment et pourquoi tu les différencie ?
    Pour tes besoins, vu tes exemples, je pense que tu maîtrise mal ces notions.
    Attends tu des nombres à virgule (flottantes)?
    Ces types de données seraient alors mal adaptées, utilise plutôt float ou double dans ce cas.
    Exemple typique ici du poid, c'est bien un nombre à virgule flottante, à moins que tu ne considères que des poids entier (int ou long)...

    Par définition un long est en entier (long), la différence est simplement l'espace de stockage nécessaire, mais depuis bien longtemps, ces deux types utilisent (généralement) le même nombre d'octet (à ma connaissance): 4 octets...
    Autrefois, le type int (dans la plupart des langages) n'utilisait que 2 octets.
    Pour des espace de stockage plus réduit, on peut utiliser le short (2 octets) ou même en C, le char (1 seul octer normalement)...
    Si tu n'utilises pas les nombres négatifs, les unsigned te permettent se grappiller des valeurs supérieures, sans effort, et évitent les erreur de conception.

    De plus en C (standard), les string n'existent pas.
    On parle plutôt de tableaux de caractères:
    Code:
    char[]
    Si ton programme reçoit ces entrées en paramètre (ligne de commande par exemple), ils sont déjà "triés" puisque dans le tableau des paramètres du logiciel:
    Code:
    *argv[]
    Il suffit de parcourir ce tableau,
    Si ces entrées sont toujours dans le même ordre, aucun problème de traitement, sinon tu peux jouer sur le
    Code:
    int argc
    Qui te donnera le nombre de paramètres entrés, et par consequent, tu sauras que le "string" n'a pas été fourni (vu tes exemple)...

    Tu peux développer une fonction qui reprendrait le fonction de instanceOf() des langages de haut niveau, qui renverrais true si l'élement testé correspond au type recherché...

    Et finalement, si les élements ne sont pas entrés en paramètre à l'appel du programme, qu'est ce qui t'empèche de "forcer un parcours":
    Entrez la ville
    Entrez le poid
    Entrez le numéro
    ...

  15. #14
    Ikhar84
    Animateur Informatique

    Re : reconnaissance d'un String

    Il faudrait préciser (après réflexion) comment le programme récupère ces données ?

    Fournies au programme en paramètres ?
    Fournies (au clavier) par l'utilisateur ?
    Lues à partir d'un fichier ?
    - Format du fichier (CSV, tabulations, tailles fixes, xml, ... --> dans tous ces cas les données devraient être bien organisées, sinon il y aurait un gros problème en amont...) ?
    - Comment est approvisionné le fichier ?
    Communication inter-processus (peu probable ici) ? Là il faudrait agir sur le processus émetteur pour standardiser la communication !
    - par exemple fournies par un processus industriel ou un matériel (lecture optique)
    ... (non exhaustif)

    Le traitement dépend en grande partie de cette fonctionnalité.
    Et si c'est un exercice, cela permettra une réflexion plus approfondie.

    Edit (HS) : Il faudrait augmenter le temps pendant lequel l'édition d'un message reste possible, cela limiterait bien le nombre de "re-post" inutiles...
    Dernière modification par Ikhar84 ; 18/12/2016 à 14h06. Motif: Emoticone retirée et ajout d'une remarque personnelle

  16. #15
    Claude-23

    Re : reconnaissance d'un String

    Merci beaucoup pour votre interesse a tous,

    a vrai dire, je cherche le moyen de savoir qu'est-ce que j'ai rentré?
    si je rentre un int: comment doit-je ecrire la question dans mon IF
    Code:
    if variable = int
       ...
    else if  variable = flaot
      ....
    effectivement je vais me faire deux tableaux,
    l'un int et l'autre comme conseiller plus haut float.

  17. #16
    inviteab0c3c8c

    Re : reconnaissance d'un String

    Citation Envoyé par Claude-23 Voir le message
    a vrai dire, je cherche le moyen de savoir qu'est-ce que j'ai rentré?
    si je rentre un int: comment doit-je ecrire la question dans mon IF
    Code:
    if variable = int
       ...
    else if  variable = flaot
      ....
    En C, vous ne pouvez pas utiliser des noms de variables qui n'aient pas été déclarés antérieurement. Ce qui implique que vous connaissez déjà le type de votre 'variable'.

    Montrez sa déclaration et la manière dont elle est initialisée, l'aide qui pourra ensuite vous être apportée n'en sera que plus efficace.

    Cordialement

  18. #17
    Jack
    Modérateur

    Re : reconnaissance d'un String

    si je rentre un int: comment doit-je ecrire la question dans mon IF
    (Re)lire mon message #9: tu tentes une conversion et tu adaptes la suite selon qu'elle a fonctionné ou non.

  19. #18
    inviteb9f49292

    Re : reconnaissance d'un String

    a vrai dire, je cherche le moyen de savoir qu'est-ce que j'ai rentré?
    si je rentre un int: comment doit-je ecrire la question dans mon IF
    J'ai l'impression que tu débutes vraiment le C, est-ce ton 1er exercice? Il faut que tu ais déjà vu les notions de boucle, de tableau, de test de comparaison (égalité)... pour résoudre cet exercice.

    De plus il faut décrypter tes messages et ça ne facilite pas, met de vrais morceaux de code (compilé) pour illustrer.

    Je réessaye de te mettre sur la voie: sous quelle forme récupères-tu tes entrées à tester ?

  20. #19
    Claude-23

    Re : reconnaissance d'un String

    Comme je l'ai déjà dit,je suis vraiment un d#ebutant
    je vais essaier de metre ca aux claire.
    Code:
    #include <stdio.h>
    
    int main() 
    {
    	int colis=0;
    	printf("entrer le nombre de colis..!");
    	scanf("%d\n", &colis);
    	
    	
    	int monInt[colis];
    	float monFloat[colis];
    	long maVariable=0;
    	
    	for (int i= 0; i<colis; i++)
    	{
    		printf("votre donne");
    		scanf("%ld", maVariable);   
    		if maVariable = int            
    		{
    			monInt[i] = maVariable;
    			maVariable = 0;
    			else
    			{
    				monFloat[i] = maVariable;
    				maVariable = 0;
    			}
    			printf("%d    %ld\n", monInt[i], monfloat[i];
    		}
    	}
    	
    }
    voici ce que j'ai fait j'usqu'a maintenant, mais 2 erreurs sont la, et c'est j'ustement ma question

  21. #20
    Dlzlogic

    Re : reconnaissance d'un String

    Bonjour,
    Je donne comme d'habitude le même conseil : commencer la rédiger l'algorithme en français : papier/crayon.
    Ensuite, il sera temps de traduire cela en C.
    Petite info : en C de base, on ne peut pas déclarer un tableau avec une dimension variable.

  22. #21
    Jack
    Modérateur

    Re : reconnaissance d'un String

    Petite info : en C de base, on ne peut pas déclarer un tableau avec une dimension variable.
    Si, si, depuis la norme C99 on peut. Mais tous les compilateurs ne l'ont pas intégrée: ça marche avec gcc mais pas avec msvc par exemple.

    Pour le reste, en voyant la ligne " if maVariable = int " , il me semble que la marche à franchir est un peu haute pour le moment et il va falloir acquérir des bases de C un peu plus solides.

  23. #22
    Dlzlogic

    Re : reconnaissance d'un String

    Bonjour Jack,
    Oui, je le savais, c'est la raison pour laquelle j'ai écrit "C de base".
    Personnellement, je ne trouve pas que ce soit une bonne idée de l'enseigner aux débutants.
    Mais je me pose une question : comment ça se passe au point de vue utilisation de la mémoire.
    Avec alloc et free (ou new et delete en C++), on savait exactement où on réservait de la mémoire et où on la libère. Idem avec un tableau alloué dans une fonction, là, la réservation de la mémoire est codée par la compile.
    Peut-être le compilateur génère tout seul le couple alloc+free, ou alors la mémoire est simplement perdue. Bref, j'aimerais bien savoir comment ça se passe.
    Merci d'avance.
    PS mon compilateur ne sait pas que c'est autorisé.

  24. #23
    gienas
    Modérateur

    Re : reconnaissance d'un String

    Bonjour à tous

    Citation Envoyé par Jack Voir le message
    ... en voyant la ligne " if maVariable = int " , il me semble que la marche à franchir est un peu haute pour le moment et il va falloir acquérir des bases de C un peu plus solides.
    Je confirme.

    Cette ligne ressemble à s'y méprendre à une ligne basic, mais le comportement est très différent, en effet.

    Sans dévoiler le pot aux roses, il faut savoir que les opérations se décomposent chronologiquement ainsi:

    1- assignation de maVariable = int;

    2- exécution du contenu des accolades;

    3- le else sera ignoré et déclenchera (peut-être) une erreur;

    Je te laisse trouver l'erreur d'écriture.

  25. #24
    Jack
    Modérateur

    Re : reconnaissance d'un String

    Personnellement, je ne trouve pas que ce soit une bonne idée de l'enseigner aux débutants.
    Je pense qu'il faut en effet commencer par apprendre a s'en passer
    Peut-être le compilateur génère tout seul le couple alloc+free, ou alors la mémoire est simplement perdue. Bref, j'aimerais bien savoir comment ça se passe.
    Oui, c'est çà, l'allocation et la désallocation sont automatiques: https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

  26. #25
    inviteab0c3c8c

    Re : reconnaissance d'un String

    Citation Envoyé par Claude-23 Voir le message
    Comme je l'ai déjà dit,je suis vraiment un d#ebutant
    je vais essaier de metre ca aux claire.
    Code:
        long maVariable=0;
    Bonjour,

    le type long est un type entier. Il est équivalent au type 'int' sur des systèmes où ce dernier est codé sur 4 octets en mémoire.

    Si vous voulez mettre des données génériques dans une variable, je ne vois que les chaines de caractères (ASCII):
    Code:
    char maVariable[32];    // tableau de 32 octets pour 31 caractères maxi (toute chaine ASCII se terminant par l'octet nul)
    Une fois que vous aurez initialisé le contenu de 'maVariable' avec un
    Code:
    scanf("%s", maVariable);
    vous devrez interpréter le contenu de 'maVariable' caractère par caractère pour connaître le type de la donnée entrée.

    Pour vous simplifier le travail, commencez par écrire 3 fonctions prototypées comme suit :
    Code:
    bool isString(char maVariable);    // Renvoie 'true' si le premier caractère est alphabétique; 'false' sinon
    bool isFloat(char maVariable);    // Renvoie 'true' si il existe un point décimal (code ASCII : '.' ou 56) ou une virgule (code ASCII : ',' ou 54); Sinon, renvoie 'false';
    bool isInteger(char maVariable);// Renvoie 'true' si tous les caractères sont des chiffres décimaux, sinon 'false'.
    À noter: NE PAS LIRE les caractères au-delà de la taille de la chaine entrée. À ce titre on se rappellera, que le dernier octet de la chaine de caractères vaut 0.

    Cordialement

  27. #26
    Jack
    Modérateur

    Re : reconnaissance d'un String

    le paramètre devrait plutôt être "char* maVariable" ou "char maVariable[]"

  28. #27
    inviteab0c3c8c

    Re : reconnaissance d'un String

    Citation Envoyé par Jack Voir le message
    le paramètre devrait plutôt être "char* maVariable" ou "char maVariable[]"
    Oui, tout à fait, j'ai oublié les crochets :
    Code:
    bool isString(char maVariable[]);    // Renvoie 'true' si le premier caractère est alphabétique; 'false' sinon
    bool isFloat(char maVariable[]);    // Renvoie 'true' si il existe un point décimal (code ASCII : '.' ou 56) ou une virgule (code ASCII : ',' ou 54); Sinon, renvoie 'false';
    bool isInteger(char maVariable[]);// Renvoie 'true' si tous les caractères sont des chiffres décimaux, sinon 'false'
    Merci

Discussions similaires

  1. Float to string
    Par invite1f39ae77 dans le forum Électronique
    Réponses: 54
    Dernier message: 23/07/2013, 23h50
  2. String et Char
    Par invited91dce06 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 26/02/2013, 18h16
  3. Instructions string
    Par invitee6712f08 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 14/05/2011, 11h55
  4. probleme String
    Par invitec35bc9ea dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 25/05/2007, 13h24
  5. String c
    Par invitea121f130 dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 13/03/2007, 06h11