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 ?
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 ?
Pokaż ten kod, który masz a napiszę Ci resztę,albo naprowadzę.. Nie możesz wymagać, że ludzie zrobią za Ciebie wszystko.
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;
}
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;
}
ofstream out("\noutput_file.txt");
Tu zakradł się błąd... wykreśl to "\n"
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();
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.
gdybyś chciał to jednak za pomocą stringów robić to zainteresuj się reverse_iterator. Ogółem zapraszam tutaj
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...
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.
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 ;)