Jak zmusic program do czytania z pliku(z poziomu konsoli) tylko okreslona liczbe znakow?

0

Napisz program letters, ktory przyjmuje jako argumenty wywolania dodatnia liczbe calkowita n oraz nazwy dwoch plikow tekstowych. Po uruchomieniu wczytuje z pierwszego pliku n znakow bez opuszczania znakow bialych i wypisuje wszystkie wczytane znaki do drugiego pliku w odwrotnej kolejnosci zamieniajac tylko kazda mala litere np. 'a' na 'z', 'b' na 'y' itd. Program nie modyfikuje innych znakow oraz pliku wejsciowego. Program zalacza tylko pliki naglowkowe cstdlib i fstream.
przykladowe wykonanie:
digits.exe 50 input.txt output.txt

Udało mi sie skonstruowac taki kod ale skonczyly mi sie juz pomysly jak zmusic program do czytania tylko np. 10 znakow. Moze ktos ma jakis pomysl..

#include <fstream>
#include <cstdlib>

using namespace std;

char letter(char line[], int n)
{
   for(int i = 0; i<=n; ++i)
        return 'a' <= line[i] && line[i] <= 'z' ? (line[i] - line[i]) + 'z' + ('a' - line[i]) : line[i];
}
int main(int argc, char *argv[])
{
    std::ifstream input(argv[2]);
    std::ofstream output(argv[3]);

    int n = std::atof(argv[1]);

    char line[n];

    while (input.get(line, n))
    {
        output << letter(line, n);
    }

    input.close();
    output.close();
    return 0;
}

0

Zrób pętlę z get(), w której będziesz zliczał znaki pobrane przez tą funkcję.

edit: Konkretnie mam na myśli tą funkcję.

edit2: Dla jasności podam też przykład.
Mając otwarty plik inputFile pobieraj z niego pojedyncze znaki jako typy int od razu rzutując na char. Całość zamknij w pętli iterującej do liczby żądanej liczby znaków:

for( int it = 0; it < requestedCharacters; ++it )
{
    buffer[ it ] = static_cast<char>(inputFile.get());
}

gdzie za buffer[] możesz wstawić cokolwiek, co będzie przetrzymywać lub wykorzystywać pobrane znaki.

0
#include <iostream>
#include <sstream>
#include <fstream>
#include <algorithm>

void enocdeCharacters(vector<char> &data) {
    for (auto &ch : data) {
        if (std::islower(ch)) {
            ch = 'a' + 'z' - ch;
        }
    }
}

void encode(std::istream &input, std::osream &output, int n) {
    vector<char> data(n);
    input.read(data.data(), n));
    data.resize(input.gcount());
    std::reverse(data.begin(), data.end());
    enocdeCharacters(data);
    output.write(data.data(), data.size());
}

int main(int argc, char *argv[])
{
    if (argc != 4) {
        std::cerr << "Wrong number of arguments\n";
        return -1;
    }
    try {
        int n = std::stoi(std::string(argv[1]));
        int inputName = argv[2];
        int outputName = argv[3];

        encode(std::ifstream(inputName), std::ofstream(outputName), n);
    } catch (std::exception &e) {
        std::cerr << e.what() << std::endl;
        return -2;
    }
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1