Parsing input is like this typically requires that you extract the tokens into a string and
test the content of your string against your parsing requirements. For example, when you extract into the string, you can then run a function which inserts it into a std::stringstream, then extract into the data type you're testing against, and see if it succeeds.
Another option is to check if the string is not a certain string, and convert back to the desired data type if so:
while (f >> str)
{
    if (f != "badInput")
    {
        // convert to double and add to array 
    }
}
Fortunately you can use the Boost.Regex facilities to avoid having to do most of the work yourself. Here's an example similar to yours:
#include <boost/regex.hpp>
int main()
{
    std::fstream f("test.txt");
    std::string token;
    boost::regex floatingPoint("((\\+|-)?[0-9]+)?(\\.)?([0-9]+)");
    while (f >> token)
    {
        if (boost::regex_match(token, floatingPoint))
        {
            // convert to double using lexical_cast<> and add to array
        }
    }