PDA

Pogledaj cijelu verziju : Cenzura



Carp
25-05-2012, 23:27
Dakle, ovo ce biti jedan dugacak post.
Naime, dobili smo zadatak da napravimo cenzuru rijeci. Dobili smo datoteku s 5 rijeci i moraju se cenzurirat skupa s njihovim permutacijama. Program radi savrseno, ali, ako je prva rijec duza od druge, i druga duza od trece, dogadja se nesto sasvim deseto. Ako netko ima vremea i volje da pogleda i ako moze pomoc, bio bih jako zahvalan.


/*

Napisati program koji ce ucitati post, te u svakoj neprimjerenoj rijeci zamijeniti sva slova osim prvog i zadnjeg znakovima zvjezdica. Rijeci su uzastopni nizovi slova odvojeni razmacima ili interpunkcijskim oznakama. Neprimjerena rijec je rijec cija se barem jedna permutacija znakova nalazi na crnoj listi. Dakle, ako se rijec „krava“ nalazi na crnoj listi, rijec „varka“ je takoder neprimjerena. Koristiti dinamicku alokaciju memorije i aritmetiku pokazivaca.

Ulazni podaci
Post koji je potrebno cenzurirati. Post se sastoji iskljucivo od malih slova engleske abecede, razmaka i interpunkcijskih oznaka. U datoteci cenzura.txt nalazi se broj N (10000 <= N <= 100000), broj rijeci na crnoj listi. U sljedecih N redaka nalaze se rijeci s crne liste, jedna rijec u jednom retku. Rijeci se sastoje iskljucivo od malih slova engleske abecede, a duljina svake rijeci je manja ili jednaka 15 znakova.

Izlazni podaci
U prvi i jedini redak na ekran treba ispisati cenzurirani post u skladu s tekstom zadatka.

Primjer:
ULAZ:
ispit je bio upglu, nista nisam znao.
IZLAZ:
ispit je bio u***u, nista nisam znao.

*/
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>

using namespace std;

struct rijeci{
char rijec[16];
};

void swap(char* first, char* second)
{
char ch = *second;
*second = *first;
*first = ch;
}

void permute(char* set, int begin, int end)
{
int i;
int range = end - begin;
if (range == 1) {
//cout << set << endl;
ofstream dat;
dat.open("perms.txt",ios::app);
dat<<set<<endl;
dat.close();
} else {
for(i=0; i<range; i++) {
swap(&set[begin], &set[begin+i]); //initial swap
permute(set, begin+1, end); //recursion
swap(&set[begin], &set[begin+i]); //swap back
}
}

}

bool cenzura(char tmp[16]){
ifstream dat;
dat.open("perms.txt");


while(!dat.eof()){
char ucitana[16];
dat.getline(ucitana, sizeof(ucitana));
if(strcmp(tmp,ucitana)==0) return true;
}
dat.close();
return false;
}

int main(){

ifstream dat;
int broj_rijeci;

dat.open("cenzura.txt");

if(dat.fail()){
cout<<"cenzura.txt se nije otvorila.\nProgram se prekida."<<endl;
exit(1);
}

dat>>broj_rijeci;

rijeci * baza_za_cenzuru = new rijeci[broj_rijeci];

for(int i=0; i<broj_rijeci; i++){
dat>>baza_za_cenzuru[i].rijec;
permute(baza_za_cenzuru[i].rijec, 0, strlen(baza_za_cenzuru[i].rijec));
}

dat.close();

char * post = new char[255];

cout<<"Unesite post:"<<endl;
cin.getline(post,255);

int broj_znakova = strlen(post);
int trenutni = 0;

char tmp[16]S= {0};
int indextmp=0;

char cenzuriran[255];

while(1){
if (*(post+trenutni) < &#39;a&#39; || *(post+trenutni) > &#39;z&#39; || *(post+trenutni) == &#39;\0&#39;){
if(tmp){
int brtmp = strlen(tmp);
tmp[brtmp+1]=&#39;\0&#39;;
//cout<<"->"<<brtmp<<"<-"<<endl;
//cout<<"->"<<tmp<<"<-"<<endl;
cout<<tmp<<endl;
if(cenzura(tmp)){
for(int i=trenutni-brtmp+1; i<trenutni-1; i++){
*(post+i)=&#39;*&#39;;
}
char tmp[16]S= {0};
}
char tmp[16]S= {0};
}
indextmp = 0;
if (*(post+trenutni) == &#39;\0&#39;) break;
trenutni++;
continue;
}

tmp[indextmp]S= *(post+trenutni);
indextmp++;
trenutni++;
}

cout<<post<<endl;

delete []Sbaza_za_cenzuru;
delete []Spost;

return 0;
}


Tu je ujedno tekst zadatka i kod ispod.
Hvala unaprijed. :oops:

franko2001
07-07-2012, 12:49
Probaj zamjeniti char sa string

StormCr0w
17-01-2013, 06:54
wat

Marvin OCX
17-01-2013, 07:21
wat

Hexfire
17-01-2013, 09:19
Slažem se, Carp radi najbolje igre.

Razzarach
17-01-2013, 11:36
?!

Azer
18-01-2013, 00:52
Svaka čast Carp. Ovo je genijalno. Uživao sam

Neven <R>
18-01-2013, 01:14
Meni je tak tak, bolji mi prvi nastavak. Ne valja od kad se Carp prodao EA-u

EDIT: e al pazi drugi post od ovog bota. They are evolving

The Boz
18-01-2013, 01:25
Mislim da ću kao maskirani osvetnik počet koračat državom sa kliještima u rukama, loviti ljude koji odgovaraju na postove botova, ter ih uškopljavati ravnodušno.

Razzarach
18-01-2013, 12:14
Zar nisi vidio Carpovu novu igru? Neznaš što propuštaš!