arahjakult Opublikowano 7 Czerwca 2005 Zgłoś Opublikowano 7 Czerwca 2005 hej mam problem z programem. problem polega na tym ze w pliku docelowym gdy wrzuce ciag znakow np : "dfs sdfsd " to kolejne wrzucenie znakow nie wrzuca go na koniec czyli za tymi spacjami po" sdfsd" tylko od razu oto kod: #include <iostream> #include <string> #include <vector> #include <conio.h> #include <fstream> #include <stdlib.h> #include <stdio.h> ////////////////////////////////////////////////////// using namespace std; ////////////////////////////////////////////////////// /* funkcja tworzaca tablice pocztkowa znakow ktore moga wystapic w pliku binarnym na podstawie tablicy ASCII, do tej tablicy nastepnie dodawane beda kolejne pola */ vector <string> tworztab(){ vector <string> tab(256); vector<string> :: iterator iter = tab.begin(); //petla przydzielajaca wektorowi wartosci tablicy ASCII for(int x=0;x<256;x++,++iter) *iter = char(x); return tab; } //funkcja pomocnicza void wypisz(vector<string> tab){ int y=0; vector<string> :: iterator iter = tab.begin();//iterator for(iter=tab.begin();iter<tab.end();++iter,++y) cout<<y << *iter <<endl; } // Podawanie nazw plikow przy kompresji const char *podajwej_k(){ string nazwa; cout << endl <<"Podaj nazwe pliku do kompresji: " ; cin >> nazwa; return nazwa.c_str(); } const char *podajwyj_k(){ string nazwa; cout <<endl << "Podaj nazwe pliku wyjsciowego po kompresji: " ; cin >> nazwa; nazwa=nazwa+".cmp"; return nazwa.c_str(); } /* Podawanie nazw plikow przy dekompresji UWAGA podawanie nazw pliku do dekompresji zostawilem, poniewaz mzoe sie przydac przy pzoniejszej modyfikacji programu */ const char *podajwej_d(){ string nazwa; cout <<endl << "Podaj nazwe pliku do dekompresji: " ; cin >> nazwa; return nazwa.c_str(); } const char *podajwyj_d(){ string nazwa; cout <<endl << "Podaj nazwe pliku wyjsciowego po dekompresji: " ; cin >> nazwa; return nazwa.c_str(); } /* funkcja kompresujaca */ vector<string> komp(){ FILE *wej; // plik wej string s,help; int zn=0,skok=0; unsigned int znak; int li=0,temp=0,index=-1; vector <string> tab; //wektor tablicy wzorcowej vector<string> :: iterator iter = tab.begin();//iterator do{wej = fopen(podajwej_k(),"rb"); //otwarcie pliku do odczytania zawartosci }while(wej==NULL); ofstream out(podajwyj_k()); s=char(getc(wej)); do{ // cout << " ROZMIAR TABLICY: " << tab.size() << endl; znak=getc(wej) ; li=0; zn=0; for(iter=tab.begin();iter<tab.end();++iter){ if((s+char(znak))==*iter) { index=li; zn=1; // cout << "!!znaleziono w tablicy!!" << s+char(znak) << endl; break; } li++; } if(zn==1){ s=s+char(znak); temp=1; }else{ if(temp==1){ help=index; tab.push_back(s+char(znak)); if((help.size()+2)<(s+char(znak)).size()){ out << noskipws; out << "<" << index << ">"; // cout << " Zapisano: "<< tab[index]<<endl; }else { out << noskipws; out << s.c_str(); } li=0; temp=0; s=char(znak); }else{ tab.push_back(s+char(znak)); out << noskipws; out << s.c_str(); s=char(znak); } } }while(znak!=((unsigned)EOF)); fclose(wej); cout << endl << "## Kompresja udana! ##" << endl << "Nacisnij jakis klawisz..." ; // wypisz(tab); getch(); return tab; } vector<string> dekomp(vector<string> tab){ if(tab.empty()){ cout << "Tablica wzorow pusta! Musisz skompresowac jakis plik! Nacisnij jakis klawisz..."; getch(); }else{ FILE *wej; // plik wej unsigned int znak,znak2; int i,y=0; string s; vector<string> :: iterator iter = tab.begin();//iterator do{wej = fopen(podajwej_d(),"rb"); //otwarcie pliku do odczytania zawartosci }while(wej==NULL); ofstream out(podajwyj_d()); while((znak=fgetc(wej))!=EOF){ if(znak==int('<')){ do{ znak2=fgetc(wej); if(char(znak)=='>') break; s=s+char(znak2); }while(znak2!=int('>')); out << noskipws; out << tab[atoi(s.c_str())].c_str(); s=""; }else{ out << noskipws; out << char(znak); } }; fclose(wej); cout << endl << "## Dekompresja udana! ##" << endl << "Nacisnij jakis klawisz..." ; // wypisz(tab); getch(); }; return tab; } void autor(){ system("cls"); cout << " /////////////////////////////////////////////////////////////////// " << endl; cout << " // Wykonanie: // " << endl; cout << " // // " << endl; cout << " /////////////////////////////////////////////////////////////////// " << endl; } //////////////////////// CZESC GLOWNA ////////////////////////////// int main(){ vector <string> tab; //wektor tablicy wzorcowej char m; do{ system("cls"); cout << "MENU:" <<endl; cout << "----------------------" <<endl; cout << "k: kompresuj plik" << endl; cout << "d: dekompresuj plik" << endl; cout << "a: o autorze" << endl; cout << "w: wyjscie" << endl ; cout << "----------------------" <<endl; cout << "?-> " ; cin >> m; switch(m){ case 'k': tab=komp(); break; case 'd': tab=dekomp(tab); break; case 'a': autor(); break; case 'w': exit(1); break; } }while(m!='w'); getch(); //system("pause"); return 0; }/////////////////////// KONIEC /////////////////////////////// Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...