Comment convertir une variable de type Char en une de type Int?

Résolu
doumbia.danse Messages postés 46 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 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.
A voir également:

4 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
1
Profil bloqué
 
En fait le Bonjour est mis automatiquement pour les non inscrit.

J'avait pris un page en note hier, mais je trouve plus.
Désolé!
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Pas de problème ;-).
0
karara20 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   9
 
1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Je ne vois pas le rapport entre : "récupérer un nombre se trouvant dans une chaine" et "évaluer une expression mathématique"...
0
karara20
 
c"est le même bite ,
car on va si-pare de caractère de nombre ,,exemple (re54 ___ re==+__et 54== ....
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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.
0
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
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
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Oui. Plutôt que de se reporter aux tables, autant vérifier que le chiffre est compris entre '0' et '9' (la machine fera le boulot à notre place).
Ou tout simplement, il est possible d'utiliser isdigit().
0
Profil bloqué
 
Bonjour !
0
doumbia.danse Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Au fait Fiddy, le nombre peut se trouver n'importe où: au début, au milieu ou même à la fin; vous comprenez?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Oui. Et du coup, tu n'as pas répondu à l'ultime question : dans le cas où il y a plusieurs nombres, tu souhaites récupérer lequel ?
Par exemple : "cou531cou75test500ok". Tu souhaites récupérer quel nombre ?
0
doumbia.danse Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Si possible je souhaiterai créer un tableau de type int, ainsi, en lisant la chaine, à chaque fois que je tombe sur un nombre, récupérer sa valeur dans le tableau, par exemple
int tableau[10];
tableau[0]=531;
tableau[1]=75;
.
.
.
Vous voyez non?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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,
0
doumbia.danse Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
essayant d'afficher le contenu du tableau, ouf !, ce j'ai trouvé ressemble plutôt à l'adresse et non aux valeurs.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Tu as dû faire une petite erreur dans l'affichage du tableau.
Montre le code que tu as mis.
0