LINUX.ORG.RU

На С++.


0

2

Написать программу, переписывающую из входного файла каждый n-й байт в выходной файл. Имена входного и выходного файлов вводятся в командной строке.

Ребят помогите - очень надо..

Ответ на: комментарий от hibou

Зачем? Ты обескровил нашу армию! К тому же теперь сюда ринутся толпы студентоты в поисках любителей порешать лабы.

anonymous
()
Ответ на: комментарий от russian_guy

> Но с другой стороны, вводя «матан-капчу» вы не сможете гарантировать, что она отсеет «нежелательных» постеров и в то же время постеры «c мозгами» пройдут ее не с 35-й попытки

На физтехе есть сайт с библиотекой. Вот чтоб туда пройти, надо было разгадать капчу из физ. задачи. Ничего, проходили же

namezys ★★★★
()
Ответ на: комментарий от russian_guy

> То есть школоте на этом сайте можно только читать? Типа «не доросли вы пока, мальцы, чтобы вам слово давать».

А пределах и дифференцировании я знал в 9 классе.

namezys ★★★★
()
Ответ на: комментарий от hibou

Ну вот например:

и что тут из ++ ? куда-то делась объектная парадигма и нет ни одного шаблона или даже чахлого класса :) а вдруг задача будет расширена до произвольного размера копируемого объекта? нет уж, решились паладинить, так уж доводите дело до конца

MKuznetsov ★★★★★
()
Ответ на: комментарий от hibou

ну вот, а могла быть ещё одна тема «меня отчислили»… :)

и да, как на плюсах всё сложно… =( не то что однострочники на перле^W Си:

int main(int argc, char **argv) {
        int n, c;
        FILE *in, *out;
        if (argc != 4 || (n = atoi(argv[3]) - 1) < 0 || !(in = fopen(argv[1], "r")) || !(out = fopen(argv[2], "w")))
                return EXIT_FAILURE;
        while (fseek(in, n, SEEK_CUR) != -1 && (c = fgetc(in)) != EOF && fputc(c, out) != EOF);
        if (fclose(in) == EOF || fclose(out) == EOF)
                return EXIT_FAILURE;
        return EXIT_SUCCESS;
}
arsi ★★★★★
()
Ответ на: комментарий от arsi

не заметили, да? ;)

да, незаметил..но это другая ошибка..atoi(argv[3]) - 1) небывает отрицательным и программа пропустит некорректный аргумент

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

> atoi(argv[3]) - 1) небывает отрицательным

бывает ;)

arsi ★★★★★
()
Ответ на: комментарий от MKuznetsov

> то есть при некорректном argv[3] имелось в виду..

и что же вернёт atoi() при некорректном аргументе? ;)

arsi ★★★★★
()

Уговорили, согласен - халявщиков в топку.

russian_guy
()
Ответ на: комментарий от arsi

и что же вернёт atoi() при некорректном аргументе? ;)

к примеру LONG_MIN, или LONG_MAX - и то и другое обходит все проведённые проверки

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

какой LONG_MIN? какой LONG_MAX? atoi() int возвращает. понимаешь? int. а int это не long. разберись сначала, о чём ты споришь и зачем оно тебе надо, млин :)

arsi ★★★★★
()

Всё, что было выше — это не C++. На C++ будет так:

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

#include <boost/lexical_cast.hpp>

namespace {

template <class C>
class mein_istreambuf_iterator
{
public:
    typedef typename std::istreambuf_iterator<C>::value_type value_type;
    typedef typename std::istreambuf_iterator<C>::difference_type difference_type;
    typedef typename std::istreambuf_iterator<C>::pointer pointer;
    typedef typename std::istreambuf_iterator<C>::reference reference;
    typedef typename std::istreambuf_iterator<C>::iterator_category iterator_category;

public:
    mein_istreambuf_iterator() :
        i_(),
        n_()
    {
    }

    explicit mein_istreambuf_iterator(typename std::istreambuf_iterator<C>::streambuf_type* b, unsigned int n) :
        i_(b),
        n_(n)
    {
        std::advance(i_, n_ - 1);
    }

    mein_istreambuf_iterator& operator++()
    {
        std::advance(i_, n_);

        return *this;
    }

    mein_istreambuf_iterator operator++(int) const
    {
        mein_istreambuf_iterator x(*this);

        ++(*this);

        return x;
    }

    bool operator==(const mein_istreambuf_iterator& r) const
    {
        return i_ == r.i_;
    }

    bool operator!=(const mein_istreambuf_iterator& r) const
    {
        return !(*this == r);
    }

    C operator*() const
    {
        return *i_;
    }

private:
    std::istreambuf_iterator<C> i_;
    unsigned int n_;
};

}

int
main(int argc, char** argv)
{
    if (argc != 4) {
        return 1;
    }

    std::copy(mein_istreambuf_iterator<char>(std::ifstream(argv[1]).rdbuf(),
                                             boost::lexical_cast<unsigned int>(argv[3])),
              mein_istreambuf_iterator<char>(),
              std::ostreambuf_iterator<char>(std::ofstream(argv[2]).rdbuf()));

    return 0;
}
Не забудь проверить правильность n!

undet
()
Ответ на: комментарий от anonymous

полностью согласен :) иначе неосиляторам и прочим анонимусам работы не будет же ;)

arsi ★★★★★
()
Ответ на: комментарий от Raving_Zealot

Лучше задачи из криптографии давать. Так и польза для дела будет.

eliriand ★★
()
Ответ на: комментарий от antony986

вот из-за таких как ты ойти и не ценится, демпингёры блин

wlan ★★
()
Ответ на: комментарий от yoghurt

Мог бы и boost.program_options заюзать для пущей красоты.

Чёрт, действительно. Не подумал…

undet
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.