Programme en c

jihad86 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   -
--
lovely flower 1986
salut tout le monde ,
je voudrais avoir la solution de se programme ,
un programme qui simule le fonctionement de la fonction "atoi".

4 réponses

mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
C'est dans le même genre que ce qu'on a fait ici :
https://forums.commentcamarche.net/forum/affich-2193642-langage-c

Sauf que là tu t'intéresse à la lecture d'un mot seulement. Parcours chaque caractère de ce mot et tant que c'est à chiffre, tu multiplie par 10 le résultat précedemment calculé et tu ajoute le chiffre que tu viens de lire.
unsigned int read_unsigned_int(char *mot){
  unsigned short int n=0;
  unsigned int res=0;
  while( sscanf(mot,"%d",&n) == 1 ){
    res*=10;
    res+=n;
  }
  return res;
}

Encore une fois c'est l'idée que je te donne je n'ai pas testé si ça marchait... Je te laisse peaufiner tout ça.

Bonne chance
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

malgré l'heure t'est toujours performant(e).

lami20j
0
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
En fait je viens de me rendre compte que c'était faux parce que le %d va lire d'un coup le nombre. Il faut faire un truc à base de getc (à la place du sscanf) en fait, et après repartir du code ascii pour le convertir le char en entier.

Sinon le reste est pareil.

Merci du compliment lami20j, je suis flattée ;)

Bonne chance
0
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
Je dis n'importe quoi ce matin, vu qu'on fait du atoi on ne fait pas de getc ou de scanf... Oulala heureusement c'est le week-end ;-)

http://www.manpagez.com/missing.php
#include <string.h>
#define ERR 0

unsigned short int ctoi(char c){
  if(c>=48 && c <=57){
    return c-48; // conversion ascii --> decimal
  }
  printf("ctoi : caractère %c invalide... retourne %d\n",c,ERR);
  return ERR;
}

unsigned int read_unsigned_int(char *mot){
  unsigned int i,res=0,len=strlen(mot);
  unsigned short int n;
  for(i=0;i<len;++i){
    res*=10;
    n=ctoi(mot[i]);
    if(n==ERR){
      printf("atoi : chaine %s invalide... retourne %d\n",mot,ERR);
      return ERR;
    }
    res+=n;
  }
  return res;
}

En espérant m'être pas trop craquée cette fois-ci ;-)

Bonne chance
0
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
en fait pour ERR faut prendre une valeur qui n'est pas dans {0,...9}. En fait on n'a qu'à prendre ERR == -1 et retourner des entiers signés pour les deux fonctions comme ça c'est reglé ;)
0