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 ///////////////////////////////