Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1356 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  convertir une chaine de char en entier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

convertir une chaine de char en entier

n°1939456
romrom12
Posté le 10-11-2009 à 17:46:22  profilanswer
 

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

mood
Publicité
Posté le 10-11-2009 à 17:46:22  profilanswer
 

n°1939462
minibox
Posté le 10-11-2009 à 17:59:28  profilanswer
 

avec "atoi" ca fonctionne  pas?

n°1939466
romrom12
Posté le 10-11-2009 à 18:09:58  profilanswer
 

je ne connaissais pas je vais essayer

n°1939485
Joel F
Real men use unique_ptr
Posté le 10-11-2009 à 19:57:47  profilanswer
 

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

n°1939497
Taz
bisounours-codeur
Posté le 10-11-2009 à 20:52:46  profilanswer
 

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

n°1939704
romrom12
Posté le 11-11-2009 à 17:27:21  profilanswer
 

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

n°1939732
romrom12
Posté le 11-11-2009 à 18:42:28  profilanswer
 

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

n°1939747
romrom12
Posté le 11-11-2009 à 19:14:40  profilanswer
 

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
n°1939754
tpierron
Posté le 11-11-2009 à 19:57:11  profilanswer
 

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
n°1939764
romrom12
Posté le 11-11-2009 à 20:26:31  profilanswer
 

ç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
mood
Publicité
Posté le 11-11-2009 à 20:26:31  profilanswer
 

n°1939772
romrom12
Posté le 11-11-2009 à 20:37:35  profilanswer
 

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  :)

n°1939785
tpierron
Posté le 11-11-2009 à 21:16:53  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  convertir une chaine de char en entier

 

Sujets relatifs
ajout d'entiercalculer le nombre de ligne d'une chaine
Chaine de caractère :S + Expression regulièreConvertir un .doc en .pdf
[RESOLU]Arrondi à partir d'une chaine de caractère[PHP] Comparaison de chaine d'un fichier
Comment convertir du code html en texte lisibleConvertir un série de caractères pour le charset UTF-8
[VBA] Convertir Date US en FRConvertir une chaine char* en hexa en entier [Résolu]
Plus de sujets relatifs à : convertir une chaine de char en entier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR