Я бы сначала прочитал строку и преобразовал первое и последнее слово в целые числа.Свободно:
std::string line;
std::getline(infile, line);
size_t ofs_front = line.find(' ');
size_t ofs_back = line.rfind(' ');
int front = std::strtol(line.substr(0, ofs_front).c_str(), NULL, 0);
int back = std::strtol(line.substr(ofs_back).c_str(), NULL, 0);
std::string text = line.substr(ofs_front, ofs_back - ofs_front);
Вам придется внести некоторые изменения, чтобы избавиться от пробелов (например, увеличить смещения, чтобы поглотить все пробелы), и вы должны добавить множество проверок ошибок.
Если вы хотите нормализовать все внутренние пробелы внутри текста, есть другое решение с использованием строковых потоков:
std::vector<std::string> tokens;
{
std::istringstream iss(line);
std::string token;
while (iss >> token) tokens.push_back(token);
}
// process tokens.front() and tokens.back() for the integers, as above
std::string text = tokens[1];
for (std::size_t i = 2; i + 1 < tokens.size(); ++i) text += " " + tokens[i];