I know this is simple, I just can't recall the best way to do this.
I have an input like " 5 15 "
that defines the x and y of a 2D vector array.
I simply need those two numbers into int col
and int row
.
What's the best way to do this? I was attemping stringstreams, but can't figure out the correct code.
Thanks for any help!
You can do it using a stringstream
:
std::string s = " 5 15 ";
std::stringstream ss(s);
int row, column;
ss >> row >> column;
if (!ss)
{
// Do error handling because the extraction failed
}
The C++ String Toolkit Library (StrTk) has the following solution to your problem:
int main()
{
std::string input("5 15");
int col = 0;
int row = 0;
if (strtk::parse(input," ",col,row))
std::cout << col << "," << row << std::endl;
else
std::cout << "parse error." << std::endl;
return 0;
}
More examples can be found Here
Note: This method is roughly 2-4 times faster than the standard library routines and rougly 120+ times faster than STL based implementations (stringstream, Boost lexical_cast etc) for string to integer conversion - depending on compiler used of course.
Here's the stringstream
way:
int row, col;
istringstream sstr(" 5 15 ");
if (sstr >> row >> col)
// use your valid input
Assuming you've already validated that the input is really in that format, then
sscanf(str, "%d %d", &col, &row);
I personally prefer the C way, which is to use sscanf()
:
const char* str = " 5 15 ";
int col, row;
sscanf(str, "%d %d", &col, &row); // (should return 2, as two ints were read)