In alternativa puoi usare un istringstream e far fare tutto a lui:
codice:
double numero;
std::istringstream is(stringa);

is>>numero;

if(is.fail() || !is.eof())
 //errore di estrazione o estrazione fermata prima della fine della stringa
{

    //la stringa non è un numero
}
. Questo metodo di solito conviene quando non si vuole semplicemente verificare se una stringa è un numero ma anche ottenere il numero rappresentato dalla stringa.