/вывод поток функция ввода в C++ (и подобный же образом STDIO функция в C) предназначена для чтения форматированного ввода. То есть они предназначены для чтения значений типов, ожидаемых программой. Нет ничего, что пытается считывать значения из потока и принимать только определенный тип, отбрасывая другие значения. Кроме того, несколько неясно, что может быть «float»: например, «+1» является отличным «плавающим» для некоторых, в то время как другим может потребоваться, чтобы он содержал по крайней мере десятичную точку, возможно даже хотя бы одну цифру после десятичная точка.
C++ 2011 и Boost (если у вас нет доступа к реализации C++ 2011) реализуйте регулярные выражения, и вы должны иметь возможность определять следующий номер с плавающей запятой, соответствующий вашему предпочтительному определению, используя это. Вот простая демонстрация этой методики:
#include <iostream>
#include <string>
#include "boost/regex.hpp"
namespace re = boost;
int main()
{
re::regex floatre("^[^-+0-9]*([-+]?[0-9]+\\.[0-9]+)(.*)");
for (std::string line; std::getline(std::cin, line);)
{
re::smatch results;
while (re::regex_match(line, results, floatre))
{
std::cout << " float='" << results[1] << "'\n";
line = results[2];
}
}
}
Что говорят STL-документы? –
Нет. Вам придется написать свой собственный. – Duck