Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by kamil ( 17 years ago )
#include <iostream>
#include <sstream>
#include <fstream>
#include <cctype>
#include <map>
#include <set>
using namespace std;
struct porownaj{
bool operator()(int x,int y){
return x>y;
}
};
//tworzenie tagow
void Tagi(ifstream &plik;,multiset<string>&tag;){
string text;
string rwx;
int a=0;
while(getline(plik,text)){
istringstream is(text);
while(is>>rwx){//zczytuje do stringa do pierwszego niedrukowanego znaku
a=rwx.size()-1;
while(((rwx[a])>31 && (rwx[a])<48) || ((rwx[a]>57) && (rwx[a]<65)) || ((rwx[a])>90 && (rwx[a])<97)){
rwx.resize(rwx.size()-1);
a--;
}//wywala przecinki,kropki itp...
while(((rwx[0])>31 && (rwx[0])<48) || ((rwx[0]>57) && (rwx[0]<65)) || ((rwx[0])>90 && (rwx[0])<97))
rwx.erase(0,1);
for(int i=0;i<rwx.size();i++)
rwx[i]=tolower(rwx[i]);//zmiena na male litery
tag.insert(rwx);
}
}
}
void sortTagi(multiset<string>&tagi;,multimap<int,string,porownaj>&wyn;){
multiset<string>::iterator kolejny=tagi.begin();
kolejny++;
multiset<string>::iterator ostatni=tagi.end();
ostatni--;
multiset<string>::iterator biezacy=tagi.begin();
int a=1;
while(kolejny!=tagi.end()){
if((*biezacy)==(*kolejny)){
a++;
if((kolejny==ostatni)&&((*biezacy).size()>1)){
wyn.insert(pair<int,string>(a,(*biezacy)));
}
}else{
if(a>1 && ((*biezacy).size())>1)
wyn.insert(pair<int,string>(a,(*biezacy)));
a=1;
}
kolejny++;
biezacy++;
}
}
void wyswietl(multimap<int,string,porownaj>&wyn;,int ile,char *nazwa){
multimap<int,string>::iterator find=wyn.begin();
int a=1;
cout<<"Plik:"<<(string)nazwa<<endl<<endl;
while(find!=wyn.end() && (ile--)>0){
cout<<" "<<a++<<" "<<(find->second)<<"=>"<<(find->first)<<endl;
find++;
}
cout<<endl;
}
int main(int argc,char *argv[]){
if(argc<2){
cout<<"Podaj sciezke pliku/plikow"<<endl;
}else{
int ile;
cout<<"Ile tagow chcesz wyswietlic?"<<endl;
cin>>ile;
cout<<endl;
ifstream *x=new ifstream[argc-1];
multiset<string> *y=new multiset<string>[argc-1];
multimap<int,string,porownaj> *z=new multimap<int,string,porownaj>[argc-1];
for(int i=0;i<argc-1;i++){
(x[i]).open(argv[i+1]);
if((x[i]).fail()){
cout<<"Blad otwarcia pliku"<<i+1<<endl<<endl;
return 1;
}
Tagi(x[i],y[i]);
sortTagi(y[i],z[i]);
wyswietl(z[i],ile,argv[i+1]);
(x[i]).close();
}
delete []x;
delete []y;
delete []z;
}
return 0;
}
Revise this Paste