Convert a string into a double, and a int. How to?

Was there a reason you're not using std::stod and std::stoi? They are at least 9 levels more powerful than flimsy strtod.

Example

#include <iostream>
#include <string>

int main() {
  using namespace std;
  string s = "-1";
  double d = stod(s);
  int i = stoi(s);
  cout << s << " " << d << " " << i << endl;
}

Output

-1 -1 -1

If you must use strtod, then just pass NULL as the second parameter. According to cplusplus.com:

If [the second parameter] is not a null pointer, the function also sets the value pointed by endptr to point to the first character after the number.

And it's not required to be non-NULL.


Back in the Bad Old Dark Days of C, I'd do something ugly and unsafe like this:

char sfloat[] = "1.0";
float x;
sscanf (sfloat, "%lf", &x);

In C++, you might instead do something like this:

// REFERENCE: http://www.codeguru.com/forum/showthread.php?t=231054
include <string>
#include <sstream>
#include <iostream>

template <class T>
bool from_string(T& t, 
                 const std::string& s, 
                 std::ios_base& (*f)(std::ios_base&))
{
  std::istringstream iss(s);
  return !(iss >> f >> t).fail();
}

int main()
{
  int i;
  float f;

  // the third parameter of from_string() should be 
  // one of std::hex, std::dec or std::oct
  if(from_string<int>(i, std::string("ff"), std::hex))
  {
    std::cout << i << std::endl;
  }
  else
  {
    std::cout << "from_string failed" << std::endl;
  }

  if(from_string<float>(f, std::string("123.456"), std::dec))
  {
    std::cout << f << std::endl;
  }
  else
  {
    std::cout << "from_string failed" << std::endl;
  }
  return 0;
} 

Personally, though, I'd recommend this:

http://bytes.com/topic/c/answers/137731-convert-string-float

There are two ways. C gives you strtod which converts between a char array and double:

// C-ish: 
input2 = strtod(input.c_str(), NULL);

The C++ streams provide nice conversions to and from a variety of types. The way to use strings with streams is to use a stringstream:

// C++ streams: 
double input2;
istringstream in(input); 
input >> input2;

We can define a stringTo() function,

#include <string>
#include <sstream>

template <typename T>
T stringTo(const std::string& s) {
  T x;
  std::istringstream in(s);
  in >> x;
  return x;
}

Then, use it like

std::cout << stringTo<double>("-3.1e3") << " " << stringTo<int>("4");