2014-12-13 2 views
-2

Мне нужна помощь в чтении пробелов, разделенных между текстовым файлом и массивом. вот пример текстового файла: «69 2 189 1876». количество ints известно (4 в этом примере). Я попробовал поиск по Google, но до сих пор не нашел удовлетворительного решения. Это мой первый раз, когда я делаю файлы ввода-вывода, поэтому, пожалуйста, пройдите ко мне. Заранее спасибо :)Чтение пробелов разделенных номеров из текстового файла в массив из ints (C++)

+1

Вы что-то пробовали? Можете ли вы хотя бы открыть файл и получить номера как-то (как строка для instacce)? –

+0

Вам нужно показать попытку, и тогда люди будут очень рады сообщить вам, какие ошибки вы совершили, и как их улучшить. Вы знаете, как читать один «int» и распечатывать его? Вы знаете о 'std :: Vector'? – BoBTFish

ответ

0

Здесь показан возможный подход:

const size_t N = 4; 
int a[N] = {}; 

std::ifstream in("YourTextFile"); 

size_t n = 0; 

while (n < N && in >> a[n]) ++n; 

Если число значений прочитанных не известно, то вместо массива вы можете использовать стандартный класс зОго :: вектор. Например

std::ifstream in("YourTextFile"); 
std::vector<int> v; 

int num;  

while (in >> num) v.push_back(num); 

Вы можете заказать некоторые начальные памяти вектора, если вы показать, что файл содержит, по меньшей мере, количество элементов, которые зарезервированы в векторе. Например

v.reserve(4); 
+0

Я хочу сохранить их в массиве, а не в векторе – user3789296

+0

@ user3789296 В моем сообщении написано, как хранить данные в массиве, если количество данных известно. –

3

Просто используйте std::copy:

#include <algorithm> 
#include <fstream> 
#include <iterator> 
#include <vector> 

std::vector<int> array; 
std::ifstream stream("filename"); 
std::copy(std::istream_iterator<int>(stream), 
      std::istream_iterator<int>(), 
      std::back_inserter(array)); 

Если вы хотите прочитать только первый N один, использовать std::copy_n вместо std::copy.

+0

Vector! = Array – user3789296

+2

@ user3789296 Вектор - это, безусловно, [массив] (http://en.wikipedia.org/wiki/Array_data_structure). Если вы не хотите использовать 'std :: vector' по какой-либо причине, и вы знаете размер upfront, вы можете использовать' std :: array' и передать его begin iterator вместо 'std: back_inserter (array)'. – rightfold

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