2010-08-24 3 views
2

Je voudrais savoir quelle est la meilleure façon de convertir un int en chaîne de style C++ et de chaîne de style C++ type int.conversion de chaînes à ints

modifier

Merci beaucoup. Lors de la conversion de la chaîne de formulaire en int ce qui se passe si je passe une chaîne de caractère? (ex: "abce").

Merci & Cordialement,

Mousey

Répondre

0

Ceci est de convertir chaîne en nombre.

#include "stdafx.h" 
#include <iostream> 
#include <string> 
#include <sstream> 

int convert_string_to_number(const std::string& st) 
{ 
    std::istringstream stringinfo(st); 
    int num = 0; 
    stringinfo >> num; 
    return num; 
} 



int main() 
{ 
    int number = 0; 

    std::string number_as_string("425"); 
    number = convert_string_to_number(number_as_string); 

    std::cout << "The number is " << number << std::endl; 
    std::cout << "Number of digits are " << number_as_string.length() << std::endl; 
} 

Comme sage, ce qui suit est de convertir nombre en chaîne.

#include "stdafx.h" 
#include <iostream> 
#include <string> 
#include <sstream> 

std::string convert_number_to_string(const int& number_to_convert) 
{ 
    std::ostringstream os; 
    os << number_to_convert; 
    return (os.str()); 
} 

int main() 
{ 
    int number = 425; 

    std::string stringafterconversion; 
    stringafterconversion = convert_number_to_string(number); 

    std::cout << "After conversion " << stringafterconversion << std::endl; 
    std::cout << "Number of digits are " << stringafterconversion.length() << std::endl; 
} 
+1

Ick ... '#include" stdafx.h "'? Vous avez besoin des trois autres, mais vous pouvez certainement vous passer de 'stdafx.h'. Oh, et 'main' est supposé retourner un entier. –

+1

@D. Shawley: C++ a en fait une règle disant que 'main' est un cas spécial et peut avoir le' return 0; 'omis résultant dans le même effet que si vous l'aviez mis là. –

+0

Que se passe-t-il si j'appelle la première fonction comme ceci: 'convert_string_to_number (" blah ")'? En l'état, cela échouera silencieusement et retournera le même que si j'avais appelé 'convert_string_to_number (" 0 ")'. C'est un "-1" définitif de moi. – sbi

3

Probablement le plus facile est d'utiliser operator<< et operator>> avec un stringstream (vous pouvez initialiser un stringstream d'un string et utiliser membre .str() du flux pour récupérer un chaîne après avoir écrit à elle.

Boost a un lexical_cast qui rend ce particulièrement facile (t mais à peine un exemple d'efficacité). L'utilisation normale serait quelque chose comme int x = lexical_cast<int>(your_string);

+0

Mais très lisible (et bien nommé) :-) PS: se référant à lexical_cast –

-1

Utilisez atoi pour convertir une chaîne en int. Utilisez un stringstream pour convertir dans l'autre sens.

+5

Si vous voulez quelque chose de l'ordre de 'atoi', utilisez au moins' strtol', qui peut au moins indiquer quand il y a une erreur. –

1

Vous pouvez changer "x%" spécificateur à "% d" ou tout autre format pris en charge par sprintf. Assurez-vous d'ajuster correctement la taille du tampon 'BUF'

int main(){ 
     char buf[sizeof(int)*2 + 1]; 
     int x = 0x12345678; 
     sprintf(buf, "%x", x); 

     string str(buf); 

     int y = atoi(str.c_str()); 
    } 

EDIT 2:

int main(){ 
    char buf[sizeof(int)*2 + 1]; 
    int x = 42; 
    sprintf(buf, "%x", x); 

    string str(buf); 

    //int y = atoi(str.c_str()); 
    int y = static_cast<int>(strtol(str.c_str(), NULL, 16)); 
} 
+0

pourquoi sizeof (int) * 2? – mousey

+0

en supposant 4 octets pour l'entier, il y aura 8 chiffres hexadécimaux avec le spécificateur "% x". – Chubsdad

+0

Ai-je raté quelque chose ici? 'sprintf (buf,"% x ", 42);' met "2a" dans "buf". 'atoi (" 2a ")' va retourner '2' pas' 42'. –

Questions connexes