Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- #include <iostream>
- #include <cstring>
- #include "auxiliar.h"
- #define INC 5
- #define INF 1000000
- using namespace std;
- /*void ordenar(char **datos,int izq,int der){
- int limite;
- if(izq>=der) return;
- }*/
- void agregarint(int *&lst,int elem){
- if(lst==NULL){
- incrementarint(lst,0);
- lst[0]=elem;
- for(int i=0;i<INC;i++) lst[i]=-1;
- }
- else{
- int numElem=0;
- for(int i=0;lst[numElem]!=-1;i++){
- numElem++;
- }
- if(numElem%INC==0) {incrementarint(lst,numElem);}
- lst[numElem]=elem;
- // cout<<"Elemento agregado "<<endl;
- }
- }
- void incrementarint(int *&lst,int numElem){
- if(lst==NULL){
- lst=new int[INC+1];
- for(int i=0;i<INC;i++) lst[i]=-1;
- }
- else{
- int *lstAux=new int[numElem+INC+1];
- for(int i=0;i<numElem;i++) lstAux[i]=lst[i];
- for(int i=numElem;i<=numElem+INC;i++) lstAux[i]=-1;
- delete []lst;
- lst=lstAux;
- }
- }
- void generarIndices(char ***tweets,char **users,char **hashtags,int **&indexUsers,int **&indexHashtags){
- int ntweets,nusers,nht;
- for(ntweets=0;tweets[ntweets]!=NULL;ntweets++);
- for(nusers=0;users[nusers]!=NULL;nusers++);
- for(nht=0;hashtags[nht]!=NULL;nht++);
- indexUsers=new int*[nusers+1];
- indexHashtags=new int*[nht+1];
- for(int i=0;i<nusers+1;i++) indexUsers[i]=NULL;
- for(int i=0;i<nht+1;i++) indexHashtags[i]=NULL;
- for(int i=0;i<nusers;i++){
- for(int j=0;j<ntweets;j++){
- char linea[200];
- strcpy(linea,tweets[j][1]);
- char **palabras;
- split_Tokens(linea,palabras,INF);
- for(int k=1;palabras[k]!=NULL;k++){
- if(strcmp(palabras[k],users[i])==0) {agregarint(indexUsers[i],j+1);}
- }
- delete [] palabras;
- }
- }
- for(int i=0;i<nht;i++){
- for(int j=0;j<ntweets;j++){
- char linea[200];
- strcpy(linea,tweets[j][1]);
- char **palabras;
- split_Tokens(linea,palabras,INF);
- for(int k=0;palabras[k]!=NULL;k++){
- if(strcmp(palabras[k],hashtags[i])==0) agregarint(indexHashtags[i],j+1);
- }
- delete [] palabras;
- }
- }
- }
- void buscarIndices(char ***tweets,char **users,char **hashtags,int **indexUsers,int **indexHashtags){
- int nbusq=0,idx,i;
- char linea[100];
- while(cin.getline(linea,98,'\n')){
- nbusq++;
- cout<<"Búsqueda "<<nbusq<<": "<<linea<<endl;
- if(linea[0]=='#'){
- for(idx=0;strcmp(hashtags[idx],linea)!=0;idx++);
- for(i=0;indexHashtags[idx][i]!=-1;i++){
- cout<<tweets[indexHashtags[idx][i]-1][0]<<": "<<tweets[indexHashtags[idx][i]-1][1]<<endl;
- }
- cout<<"Total tweets: "<<i<<endl<<endl;
- }
- else{
- for(idx=0;strcmp(users[idx],linea)!=0;idx++);
- for(i=0;indexUsers[idx][i]!=-1;i++)
- cout<<tweets[indexUsers[idx][i]-1][0]<<": "<<tweets[indexUsers[idx][i]-1][1]<<endl;
- cout<<"Total tweets: "<<i<<endl<<endl;
- }
- }
- }
- void memExacta_str(char**input,char**&output,int numElem){
- output=new char*[numElem+1];
- for(int i=0;i<numElem;i++){
- int size=strlen(input[i])+1;
- output[i]=new char[size];
- strcpy(output[i],input[i]);
- }
- output[numElem]=NULL;
- }
- bool isSep(char c){
- if( (isblank(c)) or (c == '.') or (c == ',') or (c == ';') or (c == ':') ) return true;
- return false;
- }
- void split_Tokens(char* linea, char ** & palabras, int n){
- int numPal = 0;
- char *auxPal[500];
- if(!isblank(linea[0])){
- auxPal[numPal] = linea;
- numPal++;
- }
- for(int i = 1; linea[i] != '\0'; i++){
- if(!isSep(linea[i]) and (isSep(linea[i-1]) or (linea[i-1] == '\0')) ){
- auxPal[numPal] = &linea[i];
- numPal++;
- }
- if(isSep(linea[i]) and !isSep(linea[i-1]) )
- linea[i] = '\0';
- if(numPal == n) break;
- }
- memExacta_str(auxPal,palabras,numPal);
- }
- void incrementar(char **&lst,int numElem){
- if(lst==NULL){
- lst=new char*[INC+1];
- for(int i=0;i<INC;i++) lst[i]=NULL;
- }
- else{
- char **lstAux=new char *[numElem+INC+1];
- for(int i=0;i<numElem;i++) lstAux[i]=lst[i];
- for(int i=numElem;i<=numElem+INC;i++) lstAux[i]=NULL;
- delete []lst;
- lst=lstAux;
- }
- }
- void agregar(char**&lst,char *elem){
- //cout<<"Elemento que queremos agregar "<<elem<<endl;
- if(lst==NULL){
- incrementar(lst,0);
- lst[0]=elem;
- //cout<<"Elemento agregado "<<endl;
- }
- else{
- int numElem=0,idx=0;
- for(int i=0;lst[numElem];i++){
- if(strcmp(lst[numElem],elem)==0) return;
- if(strcmp(lst[numElem],elem)<0) idx++;
- numElem++;
- }
- if(numElem%INC==0) incrementar(lst,numElem);
- for(int i=numElem;i>=idx;i--)
- lst[i]=lst[i-1];
- lst[idx]=elem;
- }
- }
- void leerTweets(char ***&tweets,char **&users,char **&hashtags){
- char linea[500],linea2[500];
- char ***auxTweets=new char**[300];
- int nTw=0;
- char **auxUsers=NULL;
- char **auxHT=NULL;
- while(cin.getline(linea,200,'\n') and strcmp(linea,"0")!=0){
- strcpy(linea2,linea);
- char **palabras;
- split_Tokens(linea,palabras,2);
- auxTweets[nTw]=new char*[2];
- auxTweets[nTw][0]=palabras[0];
- auxTweets[nTw][1]=palabras[1];
- nTw++;
- delete [] palabras;
- split_Tokens(linea2,palabras,INF);
- for(int i=1;palabras[i];i++){
- if(palabras[i][0]=='@') agregar(auxUsers,palabras[i]);
- if(palabras[i][0]=='#') agregar(auxHT,palabras[i]);
- }
- delete [] palabras;
- }
- int nusers,nht;
- for(nusers=0;auxUsers[nusers]!=NULL;nusers++);
- for(nht=0;auxHT[nht]!=NULL;nht++);
- memExacta_str(auxUsers,users,nusers);
- memExacta_str(auxHT,hashtags,nht);
- tweets=new char**[nTw+1];
- for(int i=0;i<nTw;i++)
- tweets[i]=auxTweets[i];
- tweets[nTw]=NULL;
- delete [] auxTweets;
- }
- void reporteLectura(char ***&tweets,char **&users,char **&hashtags){
- int ntweets,nusers,nht;
- for(ntweets=0;tweets[ntweets]!=NULL;ntweets++);
- for(nusers=0;users[nusers]!=NULL;nusers++);
- for(nht=0;hashtags[nht]!=NULL;nht++);
- cout<<"Total tweets: "<<ntweets<<endl;
- cout<<"Total usuarios mencionados: "<<nusers<<endl;
- cout<<"Lista de usuarios: "<<endl;
- for(int i=0;i<nusers;i++) cout<<users[i]<<' ';
- cout<<endl;
- cout<<"Total hashtags: "<<nht<<endl;
- cout<<"Lista de hashtags: "<<endl;
- for(int i=0;i<nht;i++) cout<<hashtags[i]<<' ';
- cout<<endl<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment