May 6, 2011 at 12:08pm May 6, 2011 at 12:08pm UTC
Hello everyone
Could anyone please tell why does the following code not convert the string into int? When I pass a hard coded string e-g "123456" then the code below works, but when I pass a string element from a string type vector, the code doesn't work.
class.h
1 2 3 4 5
class cls
{
public :
template <class T> bool from_string(T& t, const std::string& s, std::ios_base& (*f)(std::ios_base&));
};
class.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
template <class T> bool cls::from_string(T& t, const std::string& s, std::ios_base& (*f)(std::ios_base&))
{
std::istringstream iss(s);
return !(iss >> f >> t).fail();
}
void cls::somefunct()
{
int i;
string strn = vector[1];
if (from_string(i, std::string(strn), std::dec))
{
std::cout << "i: " << i << std::endl;
}
else
{
std::cout << "from_string failed" << std::endl;
}
}
Last edited on May 6, 2011 at 12:46pm May 6, 2011 at 12:46pm UTC
May 6, 2011 at 1:08pm May 6, 2011 at 1:08pm UTC
well, I hope you realize that a C/C++ int does
not have infinite precision.
if you intend to pass in strings that big, then:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#include <vector>
#include <string>
#include <iostream>
using namespace std;
static vector<string> vec;
main()
{
vec.push_back( "00181170323230" );
long l = strtol(vec[0].c_str(), (char **)NULL, 10);
cout << "strtol: " << l << endl;
}
NOTE: also, if you are using an STL vector, realize that it is 0-based and not 1-based. Also, you will have to use push_back() to insert values, if the vector started off empty. Please read up on stl vectors, but if you already know all this, then you can ignore me.
Last edited on May 6, 2011 at 1:10pm May 6, 2011 at 1:10pm UTC
May 6, 2011 at 1:20pm May 6, 2011 at 1:20pm UTC
Thanks a lot. That worked and thanks for all your suggestions :-)
.
vector[1] = "00181170323230"
was just an example to show that index [1]
holds "00181170323230"
value.
THANKS
May 6, 2011 at 1:36pm May 6, 2011 at 1:36pm UTC
np - btw, there are some C++ purists who will only use C++ constructs - I'm not one of them =)
gl w/your coding