A couple of notes:
- Use a std::vector. You will most likely never know the size of an input at compile time. If you do, use astd::array.
- If you have C++11 available to you, maybe think about stoiorstol, as they will throw upon failed conversion
- You could accomplish your task with a std::stringstreamwhich will allow you to treat astd::stringas astd::istreamlikestd::cin. I recommend this way
- alternatively, you could go the hard route and attempt to tokenize your std::stringbased on' 'as a delimiter, which is what it appears you are trying to do.
- Finally, why reinvent the wheel if you go the tokenization route? Use Boost's split function.
Stringstream approach
std::vector<int> ReadInputFromStream(const std::string& _input, int _num_vals)
{
    std::vector<int> toReturn;
    toReturn.reserve(_num_vals);
    std::istringstream fin(_input);
    for(int i=0, nextInt=0; i < _num_vals && fin >> nextInt; ++i)
    {
        toReturn.emplace_back(nextInt);
    }
    // assert (toReturn.size() == _num_vals, "Error, stream did not contain enough input")
    return toReturn;
}
Tokenization approach
std::vector<int> ReadInputFromTokenizedString(const std::string& _input, int _num_vals)
{
    std::vector<int> toReturn;
    toReturn.reserve(_num_vals);
    char tok = ' '; // whitespace delimiter
    size_t beg = 0;
    size_t end = 0;
    for(beg = _input.find_first_not_of(tok, end); toReturn.size() < static_cast<size_t>(_num_vals) &&
    beg != std::string::npos; beg = _input.find_first_not_of(tok, end))
    {
        end = beg+1;
        while(_input[end] == tok && end < _input.size())
            ++end;
        toReturn.push_back(std::stoi(_input.substr(beg, end-beg)));
    }
    // assert (toReturn.size() == _num_vals, "Error, string did not contain enough input")
    return toReturn;
}
Live Demo