Читать строку чисел, используя C ++ - PullRequest
3 голосов
/ 15 февраля 2011

Каков стандартный способ чтения «строки чисел» и сохранения этих чисел внутри вектора.

file.in
12 
12 9 8 17 101 2 

Стоит ли читать файл построчно, разбивать строку на несколько чисел и сохранять токены в массиве?

Что мне использовать для этого?

Ответы [ 3 ]

4 голосов
/ 15 февраля 2011
#include <vector>
#include <fstream>
#include <iterator>
#include <algorithm>

std::vector<int> data;
std::ifstream file("numbers.txt");
std::copy(std::istream_iterator<int>(file), std::istream_iterator<int>(), std::back_inserter(data));
4 голосов
/ 15 февраля 2011

Вот одно из решений:

#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>

int main()
{
    std::ifstream theStream("file.in"); 
    if( ! theStream )
          std::cerr << "file.in\n";
    while (true)
    {
        std::string line;
        std::getline(theStream, line);
        if (line.empty())
            break;
        std::istringstream myStream( line );
        std::istream_iterator<int> begin(myStream), eof;
        std::vector<int> numbers(begin, eof);
        // process line however you need
        std::copy(numbers.begin(), numbers.end(),
                  std::ostream_iterator<int>(std::cout, " "));
        std::cout << '\n';
    }
}
0 голосов
/ 15 февраля 2011

std :: cin - самый стандартный способ сделать это.std :: cin удаляет все пробелы внутри каждого числа, поэтому вы делаете

while(cin << yourinput)yourvector.push_back(yourinput)

, и они автоматически вставляются в вектор:)

РЕДАКТИРОВАТЬ:

, если хотитедля чтения из файла вы можете конвертировать ваш std :: cin, чтобы он автоматически читал из файла:

freopen("file.in", "r", stdin)
...