J'essaie de convertir treePtr->item.getInvest()
qui contient une chaîne de caractères en nombre entier. Est-ce possible?convertir la chaîne de pointeur en entier
Répondre
#include <sstream>
// ...
string str(*(treePtr->item.getInvest())); // assuming getInvest() returns ptr
istringstream ss(str);
int the_number;
ss >> the_number;
Oui cela a fonctionné, merci beaucoup –
Cela fonctionne, mais il est inefficace - il y a au moins une allocation de tas et libre là-bas, qui peut bien être coincé dans un mutex si votre programme est multithread. Faites-vous cela une fois, ou des millions de fois? –
wilhelmtell: Ce n'est pas parce que nous écrivons C++ que tout doit être une classe. L'optimisation prématurée peut être la racine de tout mal, mais choisir délibérément de faire un travail supplémentaire est pervers. –
Mieux vaut utiliser strtol()
que de jouer avec les flux.
const char* s = treePtr->item.getInvest();
const char* pos;
long the_number = ::strtol(s,&pos,10);
if(pos!=s)
// the_number is valid
strtol()
est un meilleur choix car il vous donne une indication du fait que le numéro de retour est valide ou non. En outre, il évite d'allouer sur le tas, de sorte qu'il fonctionnera mieux. Si vous voulez juste un nombre, et vous êtes heureux d'accepter un zéro au lieu d'une erreur, alors utilisez simplement atol()
(qui est juste un wrapper mince autour de strtol
qui renvoie zéro en cas d'erreur).
"Mieux vaut utiliser strtol" ... pourquoi? –
Les flux sont "la manière C++". Je préfère qu'il s'inquiète d'obtenir tous les détails associés aux cordes de droite. – mch
Shmoopty: bonne question. J'ai ajouté mon raisonnement à la réponse. –
si vous avez accès à stimuler:
int number= boost::lexical_cast<int>(treePtr->item.getInvest());
http://stackoverflow.com/questions/1243428/convert-string-to-int-with-bool-fail-in-c/1243444#1243444 – AraK