Pregunta

Before converting wstring to double - how to validate it with regex? Java no problem, but C++ raising questions.. :)

¿Fue útil?

Solución

I suppose you have a string and you want to know if it is a double or not. The following code does not use regular expressions. Instead it initializes a stringstream and reads a double from it. If the string starts with something non-numeric, then ss.fail() will be set. If it starts with a number, but does not read the whole string, then there's something non-numeric at the end of the string. So if everything went well and the string is really only a number, then ss.eof() && !ss.fail() will be true.

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream ss("123.456");
    double mydouble;
    ss >> mydouble;

    if (ss.eof() && !ss.fail())
        std::cout << "yay, success: " << mydouble << std::endl;
    else
        std::cout << "that was not a double." << std::endl;

    return 0;
}

There's also std::wstringstream if you need to convert wide character strings.

You might also want to have a look at the boost libraries, especially at Boost.Lexical_Cast. With this library you could do the following:

#include <boost/lexical_cast.hpp>
#include <iostream>

int main()
{
    try
    {
        double mydouble = boost::lexical_cast<double>("123.456");
        std::cout << "yay, success: " << mydouble << std::endl;
    }
    catch(const boost::bad_lexical_cast &)
    {
        std::cout << "that was not a double." << std::endl;
    }

    return 0;
}

Otros consejos

Or maybe it is simpler to do that this way:

std::wstring strKeyValue = "147.sd44";
double value = (double) _wtof(strKeyValue.c_str());

And if strKeyValue==0 then it means it's not double.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top