Перед преобразованием wstring
в double
- как проверить его с помощью регулярного выражения? С Java проблем нет, а вот C++ вызывает вопросы.. :)
С++: преобразование wstring в double
Ответы (2)
Я полагаю, у вас есть string
, и вы хотите знать, double
это или нет. Следующий код не использует регулярные выражения. Вместо этого он инициализирует stringstream
и считывает из него двойное значение. Если строка начинается с чего-то нечислового, то будет установлено ss.fail()
. Если он начинается с числа, но не читает всю строку, то в конце строки есть что-то нечисловое. Итак, если все прошло хорошо и строка действительно представляет собой число, то ss.eof() && !ss.fail()
будет 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;
}
Также есть std::wstringstream
, если вам нужно преобразовать строки широких символов.
Вы также можете взглянуть на библиотеки повышения, особенно на Boost.Lexical_Cast. С помощью этой библиотеки вы можете сделать следующее:
#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;
}
wstring
- как правильно сделать?
- person Ernestas Gruodis; 23.03.2014
std::wstringstream
, если вам нужно работать с широкими строками символов.
- person Alexander Tobias Bockstaller; 23.03.2014
Или, может быть, проще сделать это так:
std::wstring strKeyValue = "147.sd44";
double value = (double) _wtof(strKeyValue.c_str());
А если strKeyValue==0
то значит не двойная.
value=0
, то это не double
. А если strKeyValue="0.00"
?
- person Alexander Tobias Bockstaller; 23.03.2014
stringstream
.
- person Ernestas Gruodis; 23.03.2014
"someString".matches(some regex)
, но как это сделать в C++? - person Ernestas Gruodis   schedule 23.03.2014