Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2014, 11:43   #1
Nickolay0512
Пользователь
 
Регистрация: 26.10.2013
Сообщений: 54
По умолчанию Удалить из файла каждое пятое число

Здравствуйте. Помогите с задачей. Удалить из текстового файла каждое пятое число.
Вот мой код:
Код:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
    int x;
    ifstream in(argv[1]);
    vector<int> a;
        while (in >> x)//считываем числа из файла в массив
        {
            a.push_back(x);
        }
    in.close();
    ofstream ou(argv[1], ios::out | ios::trunc);//открываем файл для записи
    x = 0;
   //теперь файл чистый
    for (int c = 0; c < a.size(); c++)//записываем в файл 
    {
        x++;
        if (x % 5 == 0) continue;
            ou << a[c] << " ";
    }
    ou.close();
    system("pause");
    return 0;
}
Преподавателю не нравится, что я считываю весь файл в массив. Можно читать только по одному числу. Как мне переделать программу?
Nickolay0512 вне форума Ответить с цитированием
Старый 09.10.2014, 12:26   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

как то так:


Код:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main(int argc, char* argv[])
{
    int x, i;
    
    //открываем файл для чтения
    ifstream in(argv[1]);
    
    //открываем файл для записи
    ofstream ou(argv[1], ios::out | ios::trunc);
    
    //считываем из файла число 
    while (in >> x)
    {
        ++i;
        if( i % 5 == 0)
            ou << x << " ";
    }
    
    //закрывать не обязательно
    //объекты классов самостоятельно умеют прибраться за собой,
    //когда заканчивается их время жизни
    //in.close();
    //ou.close();
    system("pause");
    return 0;
}
_Bers вне форума Ответить с цитированием
Старый 09.10.2014, 12:27   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
int i=1;
        while (in >> x)//считываем числа из файла в массив
        {
            if(!(i%5))    a.push_back(x); i++;
        }
Должно хватить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.10.2014, 14:38   #4
Nickolay0512
Пользователь
 
Регистрация: 26.10.2013
Сообщений: 54
По умолчанию

Так я пробовал. После работы программы файл пустой...
Nickolay0512 вне форума Ответить с цитированием
Старый 09.10.2014, 14:54   #5
Nickolay0512
Пользователь
 
Регистрация: 26.10.2013
Сообщений: 54
По умолчанию

Вот так работает, но в конец файла какие-то непонятные числа записываются
Код:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
    int x;
    ifstream in(argv[1]);
    ofstream ou(argv[1], ios::in | ios::out | ios::binary);
    int count = 0;
    while (in >> x)//считываем числа из файла
    {
        count++;
        if (count % 5)
            ou << x << " ";
    }
    in.close();
    ou.close();
    system("pause");
    return 0;
}
Nickolay0512 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вводится последовательность ненулевых чисел, 0 – конец последовательности. Каждое число разделить на его порядковый ном(C++ язык) dimazak2009 Помощь студентам 8 12.03.2012 13:59
С++. читаем из файла текст и каждое слово в нем, меняем с соседним. stupidstudent Помощь студентам 0 13.12.2011 23:43
Нужно чтобы выводилось каждое 5-ое число Анастасия=) Общие вопросы C/C++ 1 16.12.2010 02:47
Как записать каждое число в отдельности в переменную Xcopy Общие вопросы Delphi 12 01.12.2009 17:12