Ładny brzuch
Siema mam nastepujacy problem wszystko sie kompiluje i dziala tylko cos nie wypisuje mi dobrze sortowanego tekstu. Program polega na tym ze :
- mam w pliku jakies zdania
- wyciaga z pliku te wyrazy ktore maja przynajmniej jedna literke 'a'
- zapisuje je do tablicy struktur
-sortuje w tablicy alfabetycznie ( tu cos nie jest tak ) ;/;/
#include <iostream> #include <string> #include <fstream> using namespace std; struct zdanie { zdanie *tab; string tekst; }; int sprawdz(string wyraz) { int licz = 0; for(int i=0; wyraz[i]!=0; i++) { if(wyraz[i] == 'a') licz = licz+1; if(licz == 1) return 1; } return 0; } void wypisz(char * in,zdanie *z) { int i = 0; z->tab = new zdanie [20]; ifstream plik; plik.open(in); string wyraz; while(plik>>wyraz) { if(sprawdz(wyraz)) { cout<<wyraz<<" "; z->tab[i].tekst = wyraz; i++; } } plik.close(); cout<<endl; } void wypisz2(zdanie *z) { for(int i=0;i<20;++i) { cout<<z->tab[i].tekst<<endl; } } void sortowanie(zdanie *z) { zdanie tmp; for(int i=0;i<20;++i) { for(int j=0;j<19;++j) { if(z->tab[j].tekst > z->tab[j+1].tekst) { z->tab[j+1] = tmp; z->tab[j+1] = z->tab[j]; z->tab[j] = tmp; } } } } int main(int argc, char ** argv) { zdanie *z; if(argc < 2) { cerr<<"Jako parametry wywolania podaj nazwe pliku (do odczytu)!\n"; exit(-1); } cout<<"Wyrazy pobrane :\n"; wypisz(argv[1],z); cout<<endl; cout<<"Wyrazy w tablicy \n"; cout<<"--------------------\n"; wypisz2(z); cout<<"Sortowanie alfabetyczne wyrazow \n"; cout<<"--------------------\n"; sortowanie(z); wypisz2(z); delete [] z->tab; return 0; }
z gory dziekuje za pomoc i pozdrawiam ;)
a juz mam sory ; p
nie bede robil drugiego tematu ale tutaj to dam zrobilem drugi raz podobny program
ma on wyjac wyrazy z pliku ktore maja 4 lub wiecej liter i roznica polega na tym ze w poprzednim programie tworzylem tablice struktur statycznie a tu tworze tablice stringow program ma sprawdzac jakiej ma byc wielkosci czyli ile tych wyrazow 4 literowych i wiecej jest w danym tekscie ale cos mi nie dziala jakis blad pamieci ;/;/
#include <iostream> #include <fstream> #include <string> using namespace std; int wielkosc_tablicy(char *in) { string tekst; ifstream plik; plik.open(in); int dlugosc = 0; while(plik>>tekst) { int licz = 0; int dlugosc = 0; for(int i=0; tekst[i] != 0; ++i) { licz = licz + 1; if(licz >=4) dlugosc = dlugosc +1; } } plik.close(); if(dlugosc > 1000) return 0; return dlugosc; } int sprawdzenie(string tekst) { int licznik = 0; for(int i=0; tekst[i] != 0; ++i) { licznik++; } if(licznik >= 4 ) return 1; else return 0; } void pobranie(string tekst,char *in,string *tab,int q) { int i = 0; tab = new string [q]; ifstream plik; plik.open(in); while(plik>>tekst) { if(sprawdzenie(tekst)) tab[i] = tekst; i++; } plik.close(); } void wypisanie(string *tab,int q) { string tekst; for(int i=0;i<q;++i) { cout<<i<<"."<<tab[i]; } } int main(int argc,char **argv) { string *tab; string tekst; if(argc < 2) { cerr<<"Blad . Za malo parametrow "; } int q = wielkosc_tablicy(argv[1]); pobranie(tekst,argv[1],tab,q); wypisanie(tab,q); return 0; }
Uytkownik Chudyyy edytowa ten post 23 czerwiec 2006, 08:49
while(plik>>tekst)
wydaje mi si, e takie co nie moe by...
Poza tym moesz atwo omin t ptelk, bo std::string ma skadow length(), ktra zwraca ilo znakw.
;/;/ pierwszy kod dziala a while(plik>>wyraz) jest w kodzie nie dziala sortowanie dobrze ze wzgeldu na sortowanie pomyslilem sie z przypisaniem zmiennej do indeksu tablicy ale tak wszyskto jest ok
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
- mam w pliku jakies zdania
- wyciaga z pliku te wyrazy ktore maja przynajmniej jedna literke 'a'
- zapisuje je do tablicy struktur
-sortuje w tablicy alfabetycznie ( tu cos nie jest tak ) ;/;/
#include <iostream> #include <string> #include <fstream> using namespace std; struct zdanie { zdanie *tab; string tekst; }; int sprawdz(string wyraz) { int licz = 0; for(int i=0; wyraz[i]!=0; i++) { if(wyraz[i] == 'a') licz = licz+1; if(licz == 1) return 1; } return 0; } void wypisz(char * in,zdanie *z) { int i = 0; z->tab = new zdanie [20]; ifstream plik; plik.open(in); string wyraz; while(plik>>wyraz) { if(sprawdz(wyraz)) { cout<<wyraz<<" "; z->tab[i].tekst = wyraz; i++; } } plik.close(); cout<<endl; } void wypisz2(zdanie *z) { for(int i=0;i<20;++i) { cout<<z->tab[i].tekst<<endl; } } void sortowanie(zdanie *z) { zdanie tmp; for(int i=0;i<20;++i) { for(int j=0;j<19;++j) { if(z->tab[j].tekst > z->tab[j+1].tekst) { z->tab[j+1] = tmp; z->tab[j+1] = z->tab[j]; z->tab[j] = tmp; } } } } int main(int argc, char ** argv) { zdanie *z; if(argc < 2) { cerr<<"Jako parametry wywolania podaj nazwe pliku (do odczytu)!\n"; exit(-1); } cout<<"Wyrazy pobrane :\n"; wypisz(argv[1],z); cout<<endl; cout<<"Wyrazy w tablicy \n"; cout<<"--------------------\n"; wypisz2(z); cout<<"Sortowanie alfabetyczne wyrazow \n"; cout<<"--------------------\n"; sortowanie(z); wypisz2(z); delete [] z->tab; return 0; }
z gory dziekuje za pomoc i pozdrawiam ;)
a juz mam sory ; p
nie bede robil drugiego tematu ale tutaj to dam zrobilem drugi raz podobny program
ma on wyjac wyrazy z pliku ktore maja 4 lub wiecej liter i roznica polega na tym ze w poprzednim programie tworzylem tablice struktur statycznie a tu tworze tablice stringow program ma sprawdzac jakiej ma byc wielkosci czyli ile tych wyrazow 4 literowych i wiecej jest w danym tekscie ale cos mi nie dziala jakis blad pamieci ;/;/
#include <iostream> #include <fstream> #include <string> using namespace std; int wielkosc_tablicy(char *in) { string tekst; ifstream plik; plik.open(in); int dlugosc = 0; while(plik>>tekst) { int licz = 0; int dlugosc = 0; for(int i=0; tekst[i] != 0; ++i) { licz = licz + 1; if(licz >=4) dlugosc = dlugosc +1; } } plik.close(); if(dlugosc > 1000) return 0; return dlugosc; } int sprawdzenie(string tekst) { int licznik = 0; for(int i=0; tekst[i] != 0; ++i) { licznik++; } if(licznik >= 4 ) return 1; else return 0; } void pobranie(string tekst,char *in,string *tab,int q) { int i = 0; tab = new string [q]; ifstream plik; plik.open(in); while(plik>>tekst) { if(sprawdzenie(tekst)) tab[i] = tekst; i++; } plik.close(); } void wypisanie(string *tab,int q) { string tekst; for(int i=0;i<q;++i) { cout<<i<<"."<<tab[i]; } } int main(int argc,char **argv) { string *tab; string tekst; if(argc < 2) { cerr<<"Blad . Za malo parametrow "; } int q = wielkosc_tablicy(argv[1]); pobranie(tekst,argv[1],tab,q); wypisanie(tab,q); return 0; }
Uytkownik Chudyyy edytowa ten post 23 czerwiec 2006, 08:49
while(plik>>tekst)
wydaje mi si, e takie co nie moe by...
Poza tym moesz atwo omin t ptelk, bo std::string ma skadow length(), ktra zwraca ilo znakw.
;/;/ pierwszy kod dziala a while(plik>>wyraz) jest w kodzie nie dziala sortowanie dobrze ze wzgeldu na sortowanie pomyslilem sie z przypisaniem zmiennej do indeksu tablicy ale tak wszyskto jest ok