У меня есть строка с множеством разных символов, похожих на: "$:" "213.23453" Как извлечь двойное значение 213.23453 и сохранить его в переменной, это C++/C и я не могу использовать лямбды.Извлечение двойника из строки с текстом
ответ
Вы можете использовать «регулярные выражения бедняка» функций sscanf
пропустить символы до первой цифры, а затем чтение двойного, как это:
char *str = "\"$: \" \"213.23453\"";
double d;
sscanf(str, "%*[^0-9]%lf", &d);
Примечания звездочки после первой процентного format: он инструктирует sscanf
читать строку без записи ее содержимого в выходной буфер.
Адрес demo on ideone.
раствораИспользуйте регулярное выражение.
[$]?[0-9]*(\.)?[0-9]?[0-9]?
Это должно совпадать с знаком $ и без нее.
Boost.Regex очень хорошее регулярное выражение библиотека
Лично я считаю Boost.Xpressive гораздо приятнее работать. Это библиотека только для заголовка, и у нее есть некоторые интересные функции, такие как статические регулярные выражения (регулярные выражения, скомпилированные во время компиляции).
Если вы используете компилятор, совместимый с C++ 11, используйте std::regex, если у вас нет оснований использовать что-то еще.
Обратите внимание, что хотя 'std :: regex' с GCC 4.7 компилируется просто отлично, на самом деле он очень дисфункциональный. –
Чистых С ++ может быть вручную отрезать символы мусора перед номером (первую цифру, идентифицированный std::isdigit
), а затем просто построить временный istringstream
объект для извлечения double
из:
std::string myStr("$:. :$$#&*$ :213.23453$:#$;");
// find the first digit:
int startPos = 0;
for (; startPos < myStr.size(); ++startPos)
if (std::isdigit(myStr[startPos])) break;
// cut off the trash:
myStr = myStr.substr(startPos, myStr.size() - startPos);
// retrieve the value:
double d;
std::istringstream(myStr) >> d;
но C- стиль sscanf
с соответствующим форматом, указанным будет достаточно и здесь :)
попробовать Regex в CPP – Prasad
[ 'stod'] (http://en.cppreference.com/w/cpp/string/basic_string/stof) –
Вы первый нужно решить, пишете ли вы C или C++, потому что ответ различен для двух языков. –