String to integer

QuakeCoder Messages postés 17 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 10 août 2005 - 10 août 2005 à 14:28
 magic_Nono - 12 août 2005 à 00:39
comment convertir un string en entier ?

j'utilse la fonction atoi mais le probleme si j'ai un string qui
contiens "0022" et aprés conversion mon entier contient 0022 . comment
faire pour enlever les 00 ??

33 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
10 août 2005 à 14:35
char test[5]="0022";
int test2=atoi(test);
std::cout << test2 << std::endl;
system("pause");

Dans la console, en sortie, j'ai: 22
C'est d'ailleurs bizarre qu'un int garde les 0 inutiles à gauche...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
10 août 2005 à 14:37
idem avec ceci également:

std::string test("0022");
int test2=atoi(test.c_str());
std::cout << test2 << std::endl;
system("pause");

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
10 août 2005 à 14:42
Il ne faut pas utiliser atoi.

En C++ utilises std::istringstream.



Un entier n'est pas une chaine de caractère, la présence de "0" n'a
rien a voir avec l'entier mais avec le format de conversion en chaine
de carcatere.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 août 2005 à 14:56
A part être plus lent, ça change qoui d'utiliser istringstream ?

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
10 août 2005 à 15:03
J'ai pas le temps de verifier mais istringstream doit etre un poil
moins rapide que atoi, plus rapide que *scanf, mais le plus important
c'est que c'est du C++, c'est standard et ca permet de controler si il
y a eu une erreur.
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
10 août 2005 à 15:04
du coup, en C, on utilise atoi()...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
10 août 2005 à 15:08
...et c'est un poil plus rapide
0
QuakeCoder Messages postés 17 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 10 août 2005
10 août 2005 à 15:09
Et quoi faire si je code q'avec le C ?
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
10 août 2005 à 15:15
En C utilises strtol et surtout pas atoi.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 août 2005 à 15:21
ben ça fait quelques années (et voir plus) que j'utilise atoi() en C et va impec.

ciao...
BruNews, MVP VC++
0
whikie Messages postés 99 Date d'inscription vendredi 24 juin 2005 Statut Membre Dernière intervention 17 septembre 2005
10 août 2005 à 15:25
bonjour a tous ,

excusez de mettre mon grain de sel dans ce debat mais etant grand debutant je lis vos post pour essayer de progresser mais la c'est vraiment pas clair.

je cite

du coup, en C, on utilise atoi()...

Buno

et quelques post plus tard...

En C utilises strtol et surtout pas atoi.

Steve_clamage

C'est quoi la difference entre atoi() et atoi ???

merci d'avance.
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
10 août 2005 à 15:30
C'est la meme chose.



BruNews, quand tu fais un programme digne de ce nom tu es obligé de
t'assurer que la conversion de la chaine en entier est valide,
atoi("blabla") retourne 0 et atoi("0") également.
0
QuakeCoder Messages postés 17 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 10 août 2005
10 août 2005 à 15:33
héhéh. c'etait une erreur de ma part. le atoi marche impeccc :)
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
10 août 2005 à 15:34
whikie > désolé pour les embrouilles . cf. MSDN pour les différences en strtol() et atoi()

NB: si je mets des parenthèses, c'est pour bien marqué le fait que c'est une fonction...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
10 août 2005 à 15:39
atoi("blabla") retourne 0 et atoi("0") également

1 point pour steve_clamage
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 août 2005 à 15:40
steve> oui que retourne 0 si "blabla" et c'est ce qu'on attend habituellement.

ciao...
BruNews, MVP VC++
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
10 août 2005 à 15:47
Et comment tu fais pour savoir si il y a eu une erreur pendant la
conversion ? Pour savoir si la donnée en entrée n'est pas valide ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 août 2005 à 15:55
jamais eu d'intérêt à cela sinon bien entendu on change de fonction, ça c'est clair.

ciao...
BruNews, MVP VC++
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
10 août 2005 à 16:10
Extrait du man-page de atoi:

The atoi() function has been deprecated by strtol() and should not be used in new code.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 août 2005 à 16:22
vi vi c'est écrit idem pour strcpy et autres, on lit tellement de choses à ne pas prendre pour argent content, pour preuve j'ai lu le 'Petit livre rouge' dans ma jeunesse.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous