// Μετατροπή string σε αριθμούς με χρήση της istringstream, η 3η παράμετρος μπορεί
// να είναι std::hex (16αδικό), std::dec (δεκαδικό) ή std::oct (οκταδικό)
template <class T>
bool from_string(T& t, const string& s, ios_base& (*f)(ios_base&)=dec) {
// Πέρασε το input string s στο iss
istringstream iss(s);
// Γράψε το αποτέλεσμα στο t (template variable)
return !(iss >> f >> t).fail();
}
Παράδειγμα χρήσης:
string str="31212.43343535";
double d_nr;
from_string<double>(d_nr,str);
// d_nr = 31212.433435350002
int i_nr;
from_string<int>(i_nr,str);
// i_nr = 31212
float f_nr;
from_string<float>(f_nr,str);
// f_nr = 31212.434
str="ff";
int i;
from_string<int>(i,str,hex);
// i = 255 (η τιμή 255 είναι το FF σε 16αδικό)
Link: C++ String: How to convert a string into a numeric type?
Μπορούμε επίσης εναλλακτικά να χρησιμοποιήσουμε την Boost βιβλιοθήκη boost/lexical_cast.hpp:
#include "boost/lexical_cast.hpp"
using boost::lexical_cast;
using boost::bad_lexical_cast;
string str="31212.43343535";
d_nr=lexical_cast<double>(str);
// d_nr = 31212.433435350002
// Εδώ ρίχνει μια bad_lexical_cast exception!
try {
i_nr=lexical_cast<int>(str);
}
catch (bad_lexical_cast &) { }
// i_nr = ??
f_nr=lexical_cast<float>(str);
// f_nr = 31212.434
Link: Convert a string into a numeric type using Boost.