Advertisement
Gustavo_Inzunza

Strings extenso piazza

Apr 30th, 2015
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #include <algorithm>
  6. #include <map>
  7. #include <stdio.h>
  8. #include <cmath>
  9. using namespace std;
  10. int main()
  11. {
  12.     string aux;
  13.     std::vector<string> no_usadas,parrafos;
  14.     std::map<string, std::map<string, int> > map;//almacena minuscula, mayuscula, repeticiones cte
  15.     std::map<string, std::map<string, int> > texto_palabra,parrafo_cant_textos;//almacena el texto, sus palabras(mayuscula) y repeticiones
  16.     while(cin>>aux)
  17.     {
  18.         if (aux=="::")
  19.         {
  20.             getline(cin,aux);
  21.             while(getline(cin,aux))
  22.             {
  23.                 string letras;
  24.                 parrafos.push_back(aux);
  25.                 //aux2.resize(aux.size());
  26.                 for (int i = 0; i < aux.size(); ++i)
  27.                 {
  28.                     if (aux[i]!=' ')
  29.                         letras+=aux[i];
  30.                     else
  31.                     {
  32.                         string minuscula;
  33.                         minuscula.resize(letras.size());
  34.                         for (int j = 0; j < letras.size(); ++j)
  35.                             minuscula[j]=tolower(letras[j]);
  36.                         if(find(no_usadas.begin(), no_usadas.end(),minuscula)==no_usadas.end())
  37.                         {
  38.                             map[minuscula][letras]++;
  39.                             //palabras_usadas.push_back(letras);
  40.                             texto_palabra[aux][letras]++;
  41.                             parrafo_cant_textos[aux][letras]++;
  42.                         }
  43.                         letras.clear();
  44.                     }
  45.                     if(i+1==aux.size())
  46.                     {
  47.                         string minuscula;
  48.                         minuscula.resize(letras.size());
  49.                         for (int j = 0; j < letras.size(); ++j)
  50.                             minuscula[j]=tolower(letras[j]);
  51.                         if(find(no_usadas.begin(), no_usadas.end(),minuscula)==no_usadas.end())
  52.                         {
  53.                             map[minuscula][letras]++;
  54.                             texto_palabra[aux][letras]++;
  55.                             parrafo_cant_textos[aux][letras]++;
  56.                         }
  57.                     }
  58.                     //aux2[i]=tolower(aux[i]);
  59.                 }
  60.                 //map[aux]=aux2;
  61.             }
  62.             break;
  63.         }
  64.         else
  65.             no_usadas.push_back(aux);
  66.     }
  67.     std::map< string, std::map<string, int> >::iterator p=map.begin();
  68.     std::map<string, int>::iterator p2;
  69.     while(p!=map.end())//recorro palabra en orden lexicografico
  70.     {
  71.         p2=(p->second).begin();
  72.         //cout<<p2->first<<endl;
  73.         int tamanio=p2->second;
  74.         for (int i = 0; i < tamanio; ++i)//recorro todas sus repeticiones
  75.         {
  76.             //cout<<"palabra:"<<p2->first<<endl;
  77.             //map[p->first][p2->first]--;//
  78.             std::map< string, std::map<string, int> >::iterator p3=texto_palabra.begin();
  79.             std::map<string, int>::iterator p4;
  80.             int iterador=0;
  81.             while(iterador<parrafos.size())//recorro los parrafos
  82.             {
  83.                 //cout<<"parrafo:"<<p3->first<<" le quedan:"<<texto_palabra[p3->first][p2->first]<<endl;
  84.                
  85.                 if(texto_palabra[parrafos[iterador]][p2->first]>=1)//si la palabra no se ha ocupado hasta agotarse en el txt
  86.                 {
  87.                     //cout<<"cant txt:"<<parrafo_cant_textos[parrafos[iterador]][p2->first]<<" "<<texto_palabra[parrafos[iterador]][p2->first]<<endl;
  88.                     texto_palabra[parrafos[iterador]][p2->first]--;//la ocupรฉ
  89.                     string texto_auxiliar,palabra_auxiliar;
  90.                     std::size_t found;
  91.                    
  92.                     int veces=parrafo_cant_textos[parrafos[iterador]][p2->first]-texto_palabra[parrafos[iterador]][p2->first];
  93.                     int pos=0; 
  94.                     //cout<<"parrafo:"<<parrafos[iterador]<<" veces:"<<veces<<endl;
  95.                     found=parrafos[iterador].find(p2->first);
  96.                     pos++;
  97.                     while(pos++!=veces && veces!=0)
  98.                     {
  99.                         found=parrafos[iterador].find(p2->first,found+1);
  100.                     }
  101.                     //palabra_auxiliar.resize(parrafos[iterador].size());
  102.                     for (int j = 0; j < parrafos[iterador].size(); ++j)
  103.                     {
  104.                         if(parrafos[iterador][j]!=' ')
  105.                             palabra_auxiliar+=tolower(parrafos[iterador][j]);
  106.                         if(parrafos[iterador][j]==' ')
  107.                         {
  108.                             texto_auxiliar+=palabra_auxiliar+" ";
  109.                             palabra_auxiliar.clear();
  110.                         }
  111.                        
  112.                         if(j==found)
  113.                         {
  114.                             palabra_auxiliar.clear();
  115.                             for (int k = 0; k < (p2->first).size(); ++k)
  116.                             {
  117.                                 palabra_auxiliar+=toupper(parrafos[iterador][j++]);
  118.                             }
  119.                             j--;
  120.                             texto_auxiliar+=palabra_auxiliar;
  121.                             /*
  122.                             if(j+1!=parrafos[iterador].size())
  123.                             {
  124.                                 //j++;
  125.                                 //texto_auxiliar+=".";
  126.                             }*/
  127.                             palabra_auxiliar.clear();
  128.                         }
  129.                         if(j+1==parrafos[iterador].size() and !palabra_auxiliar.empty())
  130.                         {
  131.                             texto_auxiliar+=palabra_auxiliar;
  132.                             palabra_auxiliar.clear();
  133.                         }
  134.                     }
  135.                     cout<<texto_auxiliar<<endl;
  136.                     texto_auxiliar.clear();
  137.                     break;
  138.                 }
  139.                 //p3++;
  140.                 iterador++;
  141.             }
  142.             //cout<<p2->first<<" "<<p2->second<<endl;
  143.         }
  144.         p++;
  145.     }
  146.     return 0;
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement