Читать 1 строку из istream в поток строк без временной переменной в C ++? - PullRequest
1 голос
/ 25 ноября 2010

Возможно ли прочитать одну строку из входного потока и передать ее в строковый поток, не используя временную строковую переменную в C ++?

В настоящее время я делаю чтение таким образом (но мне не нравится временная переменнаяline):

string line;
getline(in, line); // in is input stream
stringstream str;
str << line;

Ответы [ 2 ]

0 голосов
/ 25 ноября 2010

Как сказал @Steve Townsend выше, это, вероятно, не стоит усилий, однако, если вы хотите сделать это (и заранее знаете количество задействованных линий), вы можете сделать что-то вроде:

#include <iostream>
#include <iterator>
#include <string>
#include <sstream>
#include <algorithm>

using namespace std;

template <typename _t, int _count>
struct ftor
{
  ftor(istream& str) : _str(str), _c() {}

  _t operator() ()
  { 
    ++_c;
    if (_count > _c) return *(_str++); // need more
    return *_str; // last one
  }

  istream_iterator<_t> _str;
  int _c;
};

int main(void)
{
  ostringstream sv;
  generate_n(ostream_iterator<string>(sv, "\n"), 5, ftor<string, 5>(cin));

  cout << sv.str();

  return 0;
}
0 голосов
/ 25 ноября 2010

В приведенном ниже вопросе (по @Martin York) содержится подробная информация о прямом чтении из потока в поток строки.Это не прямое дублирование, так как вы хотите обрабатывать ввод построчно, но этот подход будет сложно превзойти по эффективности.Вы можете создавать отдельные строки, используя диапазон символов, когда исходные данные находятся в потоке строки.

Как читать содержимое файла в istringstream?

Если честно, этоможет быть, много работы для решения проблемы, которая на самом деле не так уж и важна.

...