2013-11-23 4 views
1

Допустим, у нас есть файл, как:конец строки в stringstream

1 2 
3 4 5 
6 7 8 

обычно мы делаем GetLine(), а затем использовать строковый поток для анализа внутри линии. Однако getline возвращает строку, для которой мы создаем stringstream. Возможно ли получить все содержимое файла в потоке строк, а затем проанализировать токены, также зная, где лежит конец строки?

ответ

1

Кажется, нет особого смысла в том, чтобы весь файл в std::string просто поместить его в std::istringstream и прочитал его можно было прочитать из std::ifstream непосредственно вместо. Если вы действительно хотите, чтобы получить файл в std::string, вот несколько вариантов:

std::string s0{ std::istreambuf_iterator<char>(in), std::istreambuf_iterator<char>() }; 
std::string s1((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>()); 
std::ostringstream out; out << in.rdbuf(); std::string s2 = out.str(); 

Очевидно, вы бы просто использовать один из этих подходов, каждый из которых будет потреблять входной поток in. Когда у вас есть файл в std::string, вы можете построить из него std::istringstream.

Я думаю, вы также можете использовать

std::stringstream stream; 
stream << in.rdbuf(); 
stream.seekg(std::ios_base::beg, 0); 

избежать необходимости читать содержимое в std::string первый.

+0

Я хочу использовать поток строк для токенизации, делая специальную обработку на конце строки для каждой строки. Есть ли способ избежать установки содержимого строки из getline в поток строк –

Смежные вопросы