convertir une chaine de char en entier

convertir une chaine de char en entier - C++ - Programmation

Marsh Posté le 10-11-2009 à 17:46:22    

Bonjour, voilà mon problème j'ai une chaine de caractère : sqd12dfg30rff1250  
 
je voudrais mettre les valeurs comprises entre 10 et 30 dans un tableau.
 
mon problème est que je ne vois pas comment passer de ma chaine à un entier ?
 
Merci

Reply

Marsh Posté le 10-11-2009 à 17:46:22   

Reply

Marsh Posté le 10-11-2009 à 17:59:28    

avec "atoi" ca fonctionne  pas?

Reply

Marsh Posté le 10-11-2009 à 18:09:58    

je ne connaissais pas je vais essayer

Reply

Marsh Posté le 10-11-2009 à 19:57:47    

boost::tokenizer pr séparer lettres et chiffres, puis std::ostringstream pr parser les entier.
 
Sinon boost::regex ou boost::spirit

Reply

Marsh Posté le 10-11-2009 à 20:52:46    

minibox a écrit :

avec "atoi" ca fonctionne  pas?


sans dec, un étudiant de 1er année comprend de lui même pourquoi atoi est toute pourrie

Reply

Marsh Posté le 11-11-2009 à 17:27:21    

atoi marche pas quand je fais : atoi (ch[i]);

Reply

Marsh Posté le 11-11-2009 à 18:42:28    

y a moyen de comparer 2 caractères entre eux avec le code ascii ou je sais pas? Comme ça je compare si mon ch[i]>=code ascii 0 && ch[i]<=code ascii 9

Reply

Marsh Posté le 11-11-2009 à 19:14:40    

Code :
  1. int main(){
  2. char ch[]="sd12szzee32sds25dfefe1253sdz10gfdhgh21mlp";
  3. int i=0,j;
  4. int tab[6];
  5. printf("la chaine est : %s\n",ch);
  6. for (j=0;j<41;j++){
  7.                         if(ch[j]>= '1' && ch[j]<= '9' )
  8.                         {
  9.                               if (isdigit(ch[j]))
  10.                                   {
  11.                                    tab[i] = atoi (ch);
  12.                                           i++;  }
  13.                                          
  14.                                           }
  15.                                    }
  16. for (i=0;i<=6;i++)
  17.     {
  18.      printf("%d\n",tab[i]);
  19.      }
  20.     getchar();
  21. }


 
ça ne m'affiche que des 0  :(


Message édité par romrom12 le 11-11-2009 à 19:20:10
Reply

Marsh Posté le 11-11-2009 à 19:57:11    

Ha, ha, presque bon (enfin, si on passe le fait que c'est du C plus que du C++)
Edit: ça t'affiche que des 0, parce que tu transmet toujours "ch" comme paramètre à atoi, ch qui commence par "sd", qui te renverra 0.
 

Code :
  1. int main()
  2. {
  3.     char ch[]="sd12szzee32sds25dfefe1253sdz10gfdhgh21mlp";
  4.     char * p;
  5.     int i=0,j;
  6.     int tab[6];
  7.     printf("la chaine est : %s\n",ch);
  8.     for (p = ch; *p; )
  9.     {
  10.         if ('1' <= *p && *p <= '9')
  11.         {
  12.             tab[i] = strtol(p, &p, 10);
  13.             i++;
  14.         }
  15.         else p ++;
  16.     }
  17.     for (j = 0; j < i; j++)
  18.     {
  19.         printf("%d\n",tab[i]);
  20.     }
  21.     getchar();
  22. }


Message édité par tpierron le 11-11-2009 à 20:00:00
Reply

Marsh Posté le 11-11-2009 à 20:26:31    

ça ne m'affiche que des zero aussi  :??: enfin 6 zeros et il y a 6 valeurs numérique  


Message édité par romrom12 le 11-11-2009 à 20:27:19
Reply

Marsh Posté le 11-11-2009 à 20:26:31   

Reply

Marsh Posté le 11-11-2009 à 20:37:35    

j'ai trouvé  :)  
 

Code :
  1. for (j = 0; j < i; j++)
  2.     {
  3.          printf("%d\n",tab[i]); /*c'est tab[j]*/
  4.      }


 
et ça marche merci  :)

Reply

Marsh Posté le 11-11-2009 à 21:16:53    

Arf, bien vu, j'ai retouché le code à la dernière minute.
 
Sinon, fait quand même attention au buffer overflow. Le coup du "int tab[6];", c'est très très casse gueule, faudrait vérifier dans la boucle qu'on ne déborde pas ou utiliser un truc du style std::vector.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed