Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> считывание из файла, считать массивы из файла 
:(
    Опции темы
koren
Дата 11.4.2010, 17:42 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 7.11.2009

Репутация: нет
Всего: 2



Нужно считать из файла такую информацию

Код

1 2 3 4 5
7 8 9 0 2
3 4 5 4 3;

1 11 1 2 -1;

13 10 1;


с помощью ifstream

считать первый массив в динамический массив A, второй - с, третий - в 

количество пробелов между массивами может быть много

; символ окончания массива

изначально я не знаю какая размерность массивов

я думаю нужно посчитать количество пробелов первой строки +1 - количество столбцов
количество символов окончания строки - количество строк

Проверка на символ окончания строки или "Enter" 

Как произвести считывание такой информации?

Это сообщение отредактировал(а) koren - 12.4.2010, 19:47
PM MAIL   Вверх
NewDima
Дата 12.4.2010, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



koren, где вопрос?
PM ICQ   Вверх
bsa
Дата 12.4.2010, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



koren, с помощью std::getline(file, buffer, ';'); считываешь строковое представление массива в буфер типа std::string. затем заворачиваешь его в std::stringstream и распарсиваешь в вектор с помощью std::copy(std::istream_iterator<int>(stream), std::istream_iterator<int>(), std::back_inserter(array)); Повторяешь для каждого из массивов A, B и C.

Это сообщение отредактировал(а) bsa - 12.4.2010, 13:21
PM   Вверх
htzg
Дата 17.4.2010, 21:43 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 17.4.2010

Репутация: нет
Всего: нет



я бы сделал так:

Код
#include <fstream>
#include <string>
#include <iostream>
#include <vector>

int main()
{
std::vector<int> VecForInt; // создаем динамический массив для данных типа int
std::vector<std::vector<int>> VecForVec; // динамический массив для массивов. Т.е. их может быть и три и более...
std::ifstream ifile; // создаем файл-поток
std::string filespec;
std::cin >> filespec;
ifile.open( filespec.c_str() ); // открываем файл. Метод класса string  с_str() превращает string в char
if( !ifile.fail() ) // если файл открылся без ошибок
{
std::string temp;
while( !ifile.eof() )  // считываем до конца файла
{
ifile >> temp; // оператор ">>" извлекает из потока данные (в нашем случае string) пропуская пробелы, табы, переносы строки. 
                      // Почему string а те int ? Потому что, как я понял символ ";" может примыкать к цифре без пробела...

if( temp.at( temp.size()-1 ) == ';') // метод at() возвращает значение i-того элемента, начиная с 0. Метод size() возвращает размер string
{
if(temp.size() > 1)
{
temp = temp.substr(0,temp.size()-2); // убираем в конце ";" , если это необходимо
VecForInt.push_back( atoi(temp.c_str()) ); // ф-ия atoi превращает из char в int, 
}
VecForVec.push_back(VecForInt); // кладем массив с int в массив для массивов
VecForInt.clear(); // очищаем массив для int
}
else
{
VecForInt.push_back( atoi(temp.c_str()) );
}
}
}
else
std::cout << "Error: ifile not open" << std::endl;
// далее можете извлекать из VecForVec с помощью функции at() нужный Вам вектор, а из вектора нужный член с помощью того же метода at()
//пример:
//VecForVec.at(0).at(0);  // первый член из первого массива
//VecForVec.at(1).at(0);  // первый член из второго массива
// и т.п.
// так же можно(и желательно) с помощью iterator . Если не знаете советую почитать.
return 0;
}



Модератор: не забываем пользоваться кнопочкой "Код" и оформлять код.

Это сообщение отредактировал(а) htzg - 21.4.2010, 19:43
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.