Welcome, guest! Login / Register - Why register?
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

Your Name: Code Language: