mam dwa dziwne problemy z programem. Szukałem w różnych miejscach, ale jakoś nie było odpowiedni na moje pytanie.
Windows 7 64 bitowy, mam uprawnienia administratora
Chciałem napisać prosty program. Wypełnia plik 100000 różnymi alfabetycznymi znakami (zapisuje do slowa.txt) a następnie posortowane zapisuje do posrotowane.txt
problemy
- nie wiem czemu, ale w StworzPlik musiałem na sztywno podać ścieżki i stworzyć pliki (inaczej ich nie tworzył więc nie miał na czym pracować)
- program nie działa jak powinien. Coś się spieprzyło z losowaniem do slowa.txt (stąd w kodzie są stałe typu i<100000) i nie chce mi tego posortować.
jeżeli się da lepiej to prosiłbym o wskazówki :)
edit. jeszcze zapomniałem dodać. Zauważyłem ze plik nie może otwierać dwóch plików tekstowych. Ale jak za komentowałem jeden a później drugi to nadal nie działał jak powinien (w ogółe cout nie zadziałał [nic nie wyświetlił])
main.cpp
#include "PlikiOperacje.h"
int main ()
{
std::fstream pliczek, wynikowy;
PlikiOperacje *ploper = new PlikiOperacje();
if(ploper->StworzPlik(pliczek)){
ploper->Wypelnij(pliczek);
ploper->Wczytaj(pliczek);
ploper->Posortuj(0,100000);
}
if(ploper->StworzPlik(wynikowy))
{
ploper->Zapisz(wynikowy);
}
ploper->ZamknijPlik(pliczek);
ploper->ZamknijPlik(wynikowy);
delete ploper;
return 0;
}
PlikiOperacje.h
#ifndef PLIKIOPERACJE_H_INCLUDED
#define PLIKIOPERACJE_H_INCLUDED
#include <fstream>
#include <string>
using std::fstream;
using std::string;
class PlikiOperacje
{
public:
PlikiOperacje();
bool StworzPlik(fstream &plik);
bool Wypelnij(fstream &plik);
bool Wczytaj(fstream &plik);
bool Posortuj(int lewy,int prawy);
bool ZamknijPlik(fstream &plik);
bool Zapisz(fstream &plik);
private:
fstream _plik;
string slowa[100000];
string linia;
};
#endif // PLIKIOPERACJE_H_INCLUDED
PlikiOperacje.cpp
#include <iostream>
#include <fstream>
#include "PlikiOperacje.h"
#include <stdlib.h>
#include <time.h>
#include <string.h>
using std::fstream;
using std::cout;
using std::cin;
using std::ios;
using std::string;
PlikiOperacje::PlikiOperacje()
{
}
bool PlikiOperacje::Wypelnij(fstream &plik)
{
srand ( time(NULL) );
for (int i = 0 ; i < 100000 ; i++){
int doilu = rand() % 10 + 1;
for (int j = 0 ; j < doilu ; j++){
int ktory = rand() % 26 + 97;
plik << char(ktory);
}
plik << "\n";
}
return true;
}
bool PlikiOperacje::Wczytaj(fstream &plik)
{
int licznik = 0;
while (true){
plik >> slowa[licznik++];
if (!plik.eof())
break;
if(licznik > 100000)
break;
}
cout << slowa[0] << slowa[99999];
return true;
}
bool PlikiOperacje::Posortuj(int lewy, int prawy)
{
int i = lewy, j = prawy;
string tmp;
string pivot = slowa[(lewy + prawy) / 2];
cout << pivot;
while (i <= j) {
while (strcmp(slowa[i].c_str(),pivot.c_str())<0)
i++;
while (strcmp(slowa[j].c_str(),pivot.c_str())>0)
j--;
if (i <= j) {
tmp = slowa[i];
slowa[i] = slowa[j];
slowa[j] = tmp;
i++;
j--;
}
}
if (lewy < j)
Posortuj(lewy, j);
if (i < prawy)
Posortuj(i, prawy);
cout << slowa[0] << slowa [50000] << slowa [99999];
return true;
}
bool PlikiOperacje::StworzPlik(fstream &plik)
{
char nazwapliku[200] = "D:\\Bibloteczka\\kotek\\pliki\\slowa.txt";
// cout << "Podaj nazwe pliku";
// cin >> nazwapliku;
if(!plik)
return false;
plik.open("D:\\Bibloteczka\\kotek\\pliki\\slowa.txt", ios::in | ios::out );
plik.open("D:\\Bibloteczka\\kotek\\pliki\\posrotowane.txt", ios::in | ios::out );
return true;
}
bool PlikiOperacje::ZamknijPlik(fstream &plik)
{
plik.close();
return true;
}
bool PlikiOperacje::Zapisz(fstream &plik)
{
for (int i = 0 ; i < 100000 ; i++){
plik << slowa[i];
plik << "\n";
}
}