Comment convertir une variable de type Char en une de type Int?
Résolu
doumbia.danse
Messages postés
52
Statut
Membre
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
En effet, j'aimerai savoir s'il y a possibilité de récupérer par exemple une chaine de caractère contenant un nombre et récupérer ce nombre dans une variable de type int
Comme exemple:
char chaine[5]="re54";
int nombre;
Ainsi stocker 54 dans nombre?
Merci d'avance.
Comme exemple:
char chaine[5]="re54";
int nombre;
Ainsi stocker 54 dans nombre?
Merci d'avance.
4 réponses
Résumé de la discussion
Il est possible d'extraire un nombre contenu dans une chaîne et de le stocker dans une variable int, comme dans l'exemple où "re54" donne 54.
Plusieurs approches sont évoquées: atoi ou sscanf pour extraire le nombre unique, et strtol pour récupérer successivement plusieurs nombres en parcourant la chaîne.
D'autres remarquent qu'il faut gérer les chiffres dispersés, utiliser isdigit pour accumuler les chiffres en nb, puis stocker nb dans un tableau, avec vérifications et allocation dynamique.
En cas de plusieurs nombres, il est conseillé d'utiliser strtol ou sscanf dans une boucle et d'envisager malloc, vérifications d'INT_MAX et l'inclusion de ctype.h pour isdigit.
-
Oui, pourquoi enlever le "Bonjour" qui est mis automatiquement ?
Sinon, pour répondre à la question, cela dépend.
Est-ce que le nombre sera toujours après "re" ? Toujours en 3ème position ? Ou il peut-être n'importe où ?
Si c'est le cas, quel nombre récupérer s'il y en a plusieurs ?
Cdlt,
Google is your friend -
-
-
-
Merci de faire attention à l'orthographe...
Sinon, non il n'y a pas de rapport. Sur l'autre post, il faut faire une pile pour pouvoir calculer une expression. Ici, pas besoin. Un simple strtol() fait l'affaire... Après, il faut savoir de combien on décale le pointeur, d'où les questions de mon premier post. -
Bonjour je suis d'accord avec @fiddy, Mais pourquoi ne pas faire l'évaluation d'un caractère saisie et le comparer avec la plage de code ASCII ( c'est-à-dire )
Décimal Octal Hex Binaire Caractère
--------------------------------------------------------
048 060 30 00110000 0
049 061 31 00110001 1
050 062 32 00110010 2
051 063 33 00110011 3
052 064 34 00110100 4
053 065 35 00110101 5
054 066 36 00110110 6
055 067 37 00110111 7
056 070 38 00111000 8
057 071 39 00111001 9
Pour savoir s'il est un nombre ou pas et par la suite garder le caractère ou tout simplement l'ignoré. au lieux de dire bêtement c"est le même bite ,
car on va si-pare de caractère de nombre ,,exemple (re54 ___ re==+__et 54== ....
à bientôt -
-
-
-
Au fait Fiddy, le nombre peut se trouver n'importe où: au début, au milieu ou même à la fin; vous comprenez?
-
-
-
Ok.
Alors, par exemple :/*la chaîne contenant les nombres à récupérer*/ char chaine[]="ar12bzze345to6t7p890"; char *p=chaine; int tab[10]; char c; int ind=0; /*nb : nombre temporaire*/ int nb=0; /*permet de savoir s'il faut écrire nb dans le tableau*/ int ok=0; while( (c=*(p++)) != '\0') { if (isdigit(c)) { nb = (nb*10) + c-'0'; ok=1; } else if (ok) { tab[ind++] = nb; nb=0; ok=0; } }
Il ne te reste plus qu'à afficher le tableau.
Note, ce programme peut être largement améliorer. Notamment, s'il y a plus de 10 nombres, le tableau sera trop petit. Tu peux donc faire en sorte d'une allocation dynamique (malloc()). De plus, tu peux vérifier que nb n'est pas trop grand (nb<=INT_MAX).
Cdlt, -
-
-
