it-swarm.com.de

Wie konvertiert man einen C ++ - String in einen int?

Mögliches Duplikat:
Wie parse ich einen String in C++ in ein int?

Wie konvertiert man einen C++ - String in einen int?

Angenommen, Sie erwarten, dass die Zeichenfolge tatsächliche Zahlen enthält (z. B. "1", "345", "38944").

Nehmen wir auch an, Sie haben keinen Boost, und Sie möchten es wirklich auf die C++ - und nicht auf die schäbige alte C-Art tun.

46
krupan
#include <sstream>

// st is input string
int result;
stringstream(st) >> result;
74

Verwenden Sie die C++ - Streams.

std::string       plop("123");
std::stringstream str(plop);
int x;

str >> x;

/* Lets not forget to error checking */
if (!str)
{
     // The conversion failed.
     // Need to do something here.
     // Maybe throw an exception
}

PS. Dieses Grundprinzip ist, wie die Boost-Bibliothek lexical_cast<> funktioniert.

Meine Lieblingsmethode ist der Boost lexical_cast<>

#include <boost/lexical_cast.hpp>

int x = boost::lexical_cast<int>("123");

Es bietet eine Methode zum Konvertieren zwischen Zeichenfolgen- und Zahlenformaten und umgekehrt. Darunter wird ein String-Stream verwendet, sodass alles, was in einen Stream gemarshallt und dann aus einem Stream entfernt werden kann (siehe die Operatoren >> und <<).

33
Martin York

C++ FAQ Lite

[39.2] Wie konvertiere ich einen std :: string in eine Zahl?

https://isocpp.org/wiki/faq/misc-technical-issues#convert-string-to-num

4

Ich habe im C++ - Code zuvor so etwas wie das Folgende verwendet:

#include <sstream>
int main()
{
    char* str = "1234";
    std::stringstream s_str( str );
    int i;
    s_str >> i;
}
4
ayaz

Lassen Sie mich meine Stimme für boost :: lexical_cast hinzufügen

#include <boost/lexical_cast.hpp>

int val = boost::lexical_cast<int>(strval) ;

Es wirft bad_lexical_cast auf Fehler.

2
Ryan Ginstrom

Vielleicht missverstehe ich die Frage, warum genau würdest du nicht atoi verwenden wollen? Ich sehe keinen Grund, das Rad neu zu erfinden.

Verpasse ich nur den Punkt hier?

0
user12576

Verwenden Sie atoi

0
Ramesh Soni