Hi Chris,
Chris Hayward <cchaywar@umich.edu> wrote concerning
[ROOT] Converting Int to String [Fri, 4 Jul 2003 10:04:49 -0400 (EDT)]
----------------------------------------------------------------------
> Hello,
> I would like to convert an integer value to string, i.e. 120 to "120", but
> it seems that the stdlib.h function itoa is not recognized. I am using
> ROOT 3.05/05 with gcc 2.96 on lxplus. Is there a ROOT function that will
> do the same thing as itoa?
In general, when converting from strings to numbers and back again.,
one can use the very cool class `std::stringstream', for example:
int main(int argc, char** argv) {
int my_integer = 0;
float my_float = 0;
for (int i = 1; i < argtc; ++i) {
if (argv[i][0] != '-') continue;
std::string opt(argv[i]);
std::stringstream arg(argv[i+1]);
if (opt[1] == '-') {
if (!opt.compare("--help")) show_help();
else if (!opt.compare("--int")) { arg >> my_integer; i++; }
else if (!opt.compare("--float")) { arg >> my_float; i++; }
else {
std::stringstream msg;
msg << "bad command line option: " << opt;
throw std::runtime_error(msg.str().c_str());
}
}
else {
for (std::string::iterator j = opt.begin(); j != opt.end(); ++j) {
switch (*j) {
case 'h': show_help(); break;
case 'i': arg >> my_integer; j = opt.end()-1; i++; break;
case 'f': arg >> my_float; j = opt.end()-1; i++; break;
default: {
std::stringstream msg;
msg << "bad command line option: " << opt;
throw std::runtime_error(msg.str().c_str());
}
}
}
}
}
std::stringstream out;
out << "My integer was: " << my_integer << "\n"
<< "My float was: " << my_float;
std::cout << out.str() << std::endl;
return 0;
}
Notice, that the functions
template <typename T>
std::ostream &operator<<(ostream& o, const T& t);
template <typename T>
std::istream &operator>>(istream& i, T& t);
are the ones that does the translations, which is nifty as it means
you'll reuse your code for that to do object<->string conversions.
The I/O and part string part of the standard C++ library is very
_very_ cool (but it does take a bit getting-used-to).
Caveat: I don't know if CINT supports std::stringstream (declared in
<sstream>), but in compiled code you should be good.
Yours,
___ | Christian Holm Christensen
|_| | -------------------------------------------------------------
| | Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91
_| DK-2200 Copenhagen N Cell: (+45) 24 61 85 91
_| Denmark Office: (+45) 353 25 305
____| Email: cholm@nbi.dk Web: www.nbi.dk/~cholm
| |
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:13 MET