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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод целочисленного массива из файла 
:(
    Опции темы
Faust666
Дата 28.3.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задан вектор A , максимальный размер 100 элементов. Элементами вектора являются целые числа. 

Файл имеет следующую структуру:
•    N – число элементов в векторе А;
•    строка или строки, содержащие значения элементов вектора А;

Необходимо ввести этот массив из файла, нигде не могу найти конкретного примера, до С++ изучал только паскаль, там все делалось 1 функцией и простым циклом, в С++ же нашел на эту тему с десяток различных функций, но так и не понял как с ними работать.
Прошу привести элементарный пример этой реализации.
PM MAIL   Вверх
Mephisto
Дата 28.3.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Код

#include <fstream>
#include <iostream>

using namespace std;

int main(int, char**){
  ifstream str("test.txt");
  if(!str.bad()){
    int LineNumber;
    str >> LineNumber;
    cout << LineNumber << endl;
    string tempStr;
    for(int i=1;i<=LineNumber;++i){
      str >> tempStr;
      cout << tempStr << endl;
    }
  }
  return 0;
}


Файл:
Код

3
one
two
tree

PM   Вверх
Faust666
Дата 29.3.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хм, а где в вашем примере массив целых чисел, в который надо производить ввод?
И почему в файле вместо цифр слова?
PM MAIL   Вверх
archimed7592
Дата 29.3.2008, 02:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



Faust666, то был пример как читать из файла.

Вот тебе пример аж с двумя реализациями(писал здесь, могут быть ошибки)
Код

#include <vector>
#include <istream>
#include <ostream>
#include <iostream>
#include <algorithm>
#include <fstream>
#include <iterator>

typedef std::vector< int > Vector; // тайпдефим вектор

void advancedReader(Vector &vec) // вектор передаётся по ссылке, причём, неконстантной дабы можно было его "изменять"(добавлять в него элементы)
{
    std::ifstream ifs("file.txt");
    { // этот код пропускает первое число
        int tmp;
        ifs >> tmp; // считываем N
    }
    std::istream_iterator< int > isi(ifs), end; // создаём два итератора. первый - читает из ifs, второй - псевдоитератор означающий конец ввода
    std::copy(isi, end, std::back_inserter(vec)); // "копируем" последовательность от isi до end в вектор. back_inserter - это тоже псевдоитератор, который осущевствляет вставку в вектор методом push_back
}

void simpleReader(Vector &vec)
{
    std::ifstream ifs("file.txt");
    int N;
    ifs >> N; // считываем N
    for (int i = 0; i < N; ++i)
    {
        int element;
        ifs >> element; // читаем очередное число
        vec.push_back(element); // добавляем его в конец вектора
    }
}

// в качестве бонуса: вывод вектора на экран
void printVector(const Vector &vec)
{
    std::ostream_iterator< int > osi(std::cout, " ");
    std::copy(vec.begin(), vec.end(), osi);
    std::cout << std::endl;
}

int main()
{
    {
        Vector vec;
        advancedReader(vec);
        printVector(vec);
    }
    
    {
        Vector vec;
        simpleReader(vec);
        printVector(vec);
    }

    return 0;
}



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
inside_pointer
Дата 29.3.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Придумай чо-нибудь как правильно массив создать(там есть какие-то операции типа выделить память и всё такое), этот код работает.

Код

#include <stdio.h>

int main()

{
    int i, len;
    FILE * in;
    in = fopen("a.in", "r");
    
    fscanf(in, "%d", &len);
    int arr[len];
    
    for (i = 0; i < len; ++i)
        fscanf(in, "%d", &arr[i]);
    
    for (i = 0; i < len; ++i)
        printf("%d ", arr[i]);
        
    putchar('\n');    
    
    fclose(in);
    return 0;
}

//


Код

3
100
200
300


Это сообщение отредактировал(а) archimed7592 - 29.3.2008, 16:55
PM MAIL   Вверх
bsa
Дата 30.3.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



inside_pointer, вот только это не С++  smile 
PM   Вверх
inside_pointer
Дата 30.3.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А он основ не знает, не может массив найти, а основы С++ в С  smile 

Код

string tempStr;

PM MAIL   Вверх
Mephisto
Дата 31.3.2008, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Цитата(inside_pointer @  30.3.2008,  15:28 Найти цитируемый пост)
А он основ не знает, не может массив найти

Вообще-то из условий задан вектор А. 
Теперь и я не могу массив найти.  smile 
PM   Вверх
Graf_h
Дата 31.3.2008, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

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



Цитата(Faust666 @ 28.3.2008,  14:44)
Задан вектор A , максимальный размер 100 элементов. Элементами вектора являются целые числа. 

Файл имеет следующую структуру:
•    N – число элементов в векторе А;
•    строка или строки, содержащие значения элементов вектора А;

Необходимо ввести этот массив из файла, нигде не могу найти конкретного примера, до С++ изучал только паскаль, там все делалось 1 функцией и простым циклом, в С++ же нашел на эту тему с десяток различных функций, но так и не понял как с ними работать.
Прошу привести элементарный пример этой реализации.

Код

...
int myint;

vector<int> vec

 ifstream str("test.txt");
  
   if(!str.fail()){
            while (str>>myint){// пока получаем данные из файла
                       vec.push_back(myint);//записываем данные у вектор
            }
}




и не нужно цыкла for(...);

Это сообщение отредактировал(а) Graf_h - 31.3.2008, 09:48


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
inside_pointer
Дата 31.3.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Одномерный массив - это не вектор чтоли ?

Цитата

Элементами вектора являются целые числа.


PM MAIL   Вверх
archimed7592
Дата 31.3.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



Цитата(inside_pointer @  31.3.2008,  12:54 Найти цитируемый пост)
Одномерный массив - это не вектор чтоли ?

Нет, конечно smile.

Кстати, если я не ошибаюсь, твой код violates ISO-C++(да, я знаю, что он соответствует C99, но не считаю, что целесообразно учить человека, желающего изучить С++ тем вещам, которые не будут там работать)...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Mephisto
Дата 31.3.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Graf_h, первым числом в файле идет количество элементов в файле!
Его не нужно пихать в сам вектор.
А числа которые идут после определенного числа из задания совершенно непонятно что с ними делать! Зачем их в вектор-то пихать?

Т.е. если файл:
Цитата

3
123
124
125
126
127

В векторе должно быть
Цитата

123
124
125

В задании не сказано что в вектор должны попасть 124 и 125! А тем более 3
PM   Вверх
Graf_h
Дата 31.3.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

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



Цитата(Faust666 @  28.3.2008,  14:44 Найти цитируемый пост)
Файл имеет следующую структуру:•    N – число элементов в векторе А;•    строка или строки, содержащие значения элементов вектора А;


Цитата(Mephisto @  31.3.2008,  15:32 Найти цитируемый пост)
Graf_h, первым числом в файле идет количество элементов в файле!Его не нужно пихать в сам вектор.

Зачем его вообще задавать? В моем варианте алгоритм пластичнее , так как не нужно указывать числа елементов. ы даже когда в файле будет не целочисельное число, алгоритм не даст сбой, а просто перестанет считывать данные. можно конечно еще ловить исключения... но это уже другая история smile 


Mephisto, я его не навязываю, просто показал как можно делать, а то все For да  For  smile 


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Mephisto
Дата 31.3.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Graf_h, вот структура файла:
Цитата

Файл имеет следующую структуру:
•    N – число элементов в векторе А;
•    строка или строки, содержащие значения элементов вектора А;

Твой вариант, каким бы пластичным он небыл, но не решает поставленной задачи  smile 
PM   Вверх
Graf_h
Дата 31.3.2008, 16:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

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



Цитата(Mephisto @  31.3.2008,  16:05 Найти цитируемый пост)
Твой вариант, каким бы пластичным он небыл, но не решает поставленной задачи


Код

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>

int main(int argc, char* argv[])
{
    std::ifstream str("test.txt");
    int count;//количество елементов
    int elem;//для считывания елемента
    std::vector<int> vec;//вектор для хранения данных
    if (!str.fail()){
     
        str>>count;//читаем количество елементов
     int index=0;
     while (!str.eof()&& index<count){
         if (str>>elem){//если елемент типа int то записываем в вектор
             std::cout<<elem<<std::endl;
            vec.push_back(elem);
            index++;
         }

     
     }

    } else std::cerr<<"error open file"<<std::endl;
    

    
    return 0;
}






Mephisto, cмотрите какая красота + проверяет елемент на соответствее типа int. вот вам пластика  smile 

P.S програмирование это исскуство

Это сообщение отредактировал(а) Graf_h - 31.3.2008, 16:25


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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