Wczytanie wejścia z pliku zamiana kolejności

0

JWT
np. input_file.txt
12 4 abc ef !@# 7
p4 r
I to wsadzić do output_file.txt
r 4p
7 #@! fe cba 4 21

Mam algorytm który mi zamienia kolejność, ale jak zrobić z tymi plikami żeby to miało ręce i nogi ?

0

Pokaż ten kod, który masz a napiszę Ci resztę,albo naprowadzę.. Nie możesz wymagać, że ludzie zrobią za Ciebie wszystko.

0

Jest krotki prosty i konkretny, nie ma rewelacji ale spełnia zadanie, z obiektem typu string, bo jak wspomniałem wcześniej mam problem z tymi dołączaniem i tworzeniem pliku, oczywiście aby przeanalizował każdy wyraz z pliku trzeba ustawić jakąś pętle która wykona się tyle razy ile słów, no właśnie, czyli pobieram pierwsze słowo, odwracam wyświetlam, drugie obracam wyświetlam, itd ?

#include <string>
#include <iostream>

using namespace std;

int main()
{
    string slowo;
    cin>>slowo;
    char temp;
    int i,j;
    for(j=0,i=slowo.size()-1;j<i;--i,++j)
    {
     temp=slowo[i];
     slowo[i]=slowo[j];
     slowo[j]=temp;
    }
     cout << slowo << endl;                                   
    return 0;
}
0

Szczerze mówiąc byłem pewny, że nic nie napisałeś, ale jeżeli coś masz to dotrzymuję słowa..

#include <string>
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main(){
    vector<string> tab;
    string line;
    ifstream in("input_file.txt");
    while(getline(in,line))
        tab.push_back(line);
    in.close();

    cout << "input_files: \n\n" ;
    for(int i =0;i<tab.size();i++)
        cout << tab[i] << endl;


    ofstream out("\noutput_file.txt");
    cout << "output_files.txt:\n\n";
    for(int i = tab.size()-1;i>=0;i--){
        for(int j = tab[i].size()-1;j>=0;j--){
            out << tab[i][j];
            cout << tab[i][j];
        }
        cout<<endl;
        out<<endl;
    }
    out.close();
    return 0;
}
0
ofstream out("\noutput_file.txt");

Tu zakradł się błąd... wykreśl to "\n"

0

wersja bez stringa

    fstream input("input_file.txt", ios::in);
    fstream output("output_file.txt", ios::out);

    input.seekg(0, ios::end);

    int l = input.tellg() - 1;
    int pos = 0;
    char c;

    while(pos++ != l)
    {
        input.seekg(l - pos);
        input.get(c);
        output << c;
    }

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

A dziękuje za pomoc, tak na marginesie za tydzień mam kolokwium z programowania a za dwa tygodnie projekt, więc uwierz mi, że chce wiedzieć wszystko o wszystkich algorytmach jakie mamy na ćwiczeniach między innymi o tym, aby nie przejechać się na zaliczeniach :)Pozdrawiam.

0

gdybyś chciał to jednak za pomocą stringów robić to zainteresuj się reverse_iterator. Ogółem zapraszam tutaj

0

A ja chciałbym zapytać czy już w tak prostym kodzie jaki zaprezentował Kopernik, a "pozdrawiam" zasugerował używanie reverse_iterator dla stringa faktycznie powinno się to robić? Bo skoro używać iteratora dla stringa, to czemu nie użyć go również dla vectora i czemu nie pojechać od razu z const_iterator i const_reverse_iterator?

Pierwsza pętla będzie mniej więcej taka:

for (vector<string>::const_iterator it = tab.begin(); it != tab.end(); it++)
    cout << *it << endl;

A druga już taka:

for (vector<string>::const_reverse_iterator rit = tab.rbegin(); rit != tab.rend(); rit++) {
    for (string::const_reverse_iterator rsit = (*rit).rbegin(); rsit != (*rit).rend(); rsit++) {
        out << *rsit;
        cout << *rsit;
    }
    cout<<endl;
    out<<endl;
}

To faktycznie takie dobre? Bo wygląda strasznie...

0

Właściwie też chciałem to napisać, ale stwierdziłem, że nie ma sensu, tak samo jak nie było sensu pisać bóg wie jakiego kodu, zwłaszcza, że burger_food sam korzysta z std::string.

0
Kopernik napisał(a)

zwłaszcza, że burger_food sam korzysta z std::string.
może korzysta ze stringa bo nie ma pojęcia, że można zrobić to inaczej? Wybierze sobie jaką metodę chce, niech się cieszy, że dostał kilka rozwiązań może wyniesie z tego coś więcej niż samo otwieranie i zamykanie pliku ;)

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