Advertisement
Gilgamesh858

subStringa

Nov 26th, 2014
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.51 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cstdlib>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. //Questi sono prototipi di funzioni che ho creato per evitare di impasticciare un po' il tutto. Se non sapete cosa sono saltateli! Poi il proffolo li spiegherà.
  9. string alloca_Array( int n, char consonanti[], char vocali[], string parole[], const int MAX_STRING, int j );
  10. void trova_subStringa( string subStringa,  string parole[], const int MAX_STRING, bool niente);
  11.  
  12. int main()
  13. {
  14.     /*
  15.      * Avendo un array dire se una stringa x letta in input è presente come sottostringa nell'array,
  16.      * che è formato da stringhe generato dall'algoritmo vocale_Consonante
  17.      *
  18.      * Creato da Trupia Ludovico
  19.      */
  20.  
  21.     srand(time(NULL));
  22.     const int MAX_STRING = 10;
  23.     //Servono nella funzione alloca_Array()
  24.     int n = 0;
  25.     char consonanti[16] = {'b','c','d','f','g','h','l','m','n','p','q','r','s','t','v','z'};
  26.     char vocali[5] = {'a','e','i','o','u'};
  27.     string parole[MAX_STRING];
  28.     int j = 0;
  29.     string subStringa;
  30.     bool niente = true;
  31.  
  32.     while( j < MAX_STRING ) //j varia da 0 a MAX_STRING - 1 in questo caso da 0 a 9
  33.     {
  34.         parole[j] = alloca_Array( n, consonanti, vocali, parole, MAX_STRING, j ); //Viene richiamata la funzione alloca_Array e le passiamo le variabili n, gli array consonanti, vocali e parole, la costante MAX_STRING e la j !!!Guardare in basso alla funzione alloca_Array()!!!
  35.         j++; //Incremento della j e passaggio all'inserimento della successiva parola
  36.     }
  37.     cout << endl << endl;
  38.  
  39.     cout << " Inserisci una parola // ";
  40.     cin >> subStringa;
  41.  
  42.     trova_subStringa( subStringa, parole, MAX_STRING, niente); //Viene richiamata la funzione trova_subStringa con passaggio dei parametri subStringa, l'array parole, la costante MAX_STRING e la bool niente che serve a verificare, alla fine se la sottostringa è contenuta in qualche parola !!!Guardare in basso alla funzione trova_subStringa()!!!
  43.  
  44.     return 0;
  45.  
  46. } //FINE DEL MAIN!
  47.  
  48. //** INIZIO FUNZIONI **//
  49.  
  50. string alloca_Array( int n, char consonanti[], char vocali[], string parole[], const int MAX_STRING, int j )
  51. {
  52.     //Il funzionamento della funzione è banale (XD)
  53.     cout << endl;
  54.  
  55.     if( j < MAX_STRING ) //fino a che la variabile j non raggiunge la dimensione dell'array di stringhe l'if viene eseguito
  56.     {
  57.         n = ((rand() % 4) + 2) * 2; //Creo un numero casuale tra 4 - 6 - 8 - 10 che determinerà la lunghezza della parola
  58.  
  59.         for( int i = 0; i < n; i++)
  60.         {
  61.             if( i % 2 == 0 ) //Scelgo tra consonante e vocale
  62.             {
  63.                parole[j] += consonanti[rand()%16]; //Inserisco la consonante
  64.             }
  65.             else
  66.             {
  67.                 parole[j] += vocali[rand()%5]; //Inserisco la vocale
  68.             }
  69.         }
  70.  
  71.         cout << " | " << parole[j]; //Stampo a video la parola
  72.  
  73.         if( n == 4 ) cout << "\t\t|"; else cout << "\t|";   //La funzionalità di \t è la tabulazione dell'output in modo da averlo bello ordinato
  74.  
  75.         cout << endl << " | \t\t|";
  76.     }
  77.  
  78.     return parole[j]; //ritorno al main la parola-jesima e la inserisco nell'array parole vero e proprio
  79. }
  80.  
  81. void trova_subStringa( string subStringa,  string parole[], const int MAX_STRING, bool niente)
  82. {
  83.     //Il concetto di questa funzione è trovare la sottostringa
  84.  
  85.     int k = 0; //Imposto una variabile k = 0 che mi servirà per prendere ad una ad una le lettere della stringa inserita da noi
  86.  
  87.     for( int i = 0; i < MAX_STRING; i++ ) //ciclo for da 0 a MAX_STRING - 1
  88.     {
  89.         for( int j = 0; j < parole[i].length(); j++) //ciclo for da 0 a lunghezza della parola-iesima - 1
  90.         {
  91.             if( subStringa.at(k) == parole[i][j] ) //Se il carattere-kappesimo (non si può sentire D:) è uguale al carattere-jesimo della parola-iesima allora...
  92.             {
  93.                 k++; //Incremento k in modo da passare al carattere successivo della nostra sottostringa
  94.                 if( k < subStringa.length() && j < parole[i].length() && subStringa.at(k) != parole[i][j+1] ) //Se la k è mino della lunghezza della sottostringa e j è minore della lunghezza della parola e il carattere della sottostringa (ora k+1) è diverso dal successivo carattere della parola-iesima allora...
  95.                 {
  96.                     k = 0; //Imposto k = 0 perchè la sottostringa non è contenuta al momento in quella parola
  97.                     /*
  98.                      * Es.
  99.                      *    banana (parola-iesima)            "b" è il carattere j-esimo(in questo caso j=0) della parola-iesima
  100.                      *    na     (sottostringa)             "n" è il carattere k-esimo(in questo caso k=0) della sottostringa
  101.                      */
  102.                 }
  103.  
  104.                 if( k == subStringa.length() ) //Se j raggiunge la fine della sottostringa vorrà dire che la sottostringa è contenuta in quella parola! :D
  105.                 {
  106.                     cout << endl << endl << "La parola // " << parole[i] << " // contiene la sottostringa // " << subStringa << " //" <<endl;
  107.                     k = 0; //K=0 perchè si passa alla prossima parola;
  108.                     niente = false; //falso perchè abbiamo trovato almeno una sottostringa valida!
  109.                 }
  110.             }
  111.         }
  112.     }
  113.  
  114.     if( niente ) //Se niente == vero allora nessuna parola contiene la nostra sottostringa;
  115.     {
  116.         cout << endl << endl << "Nessuna parola contiene la sottostringa // " << subStringa << " //" << endl;
  117.     }
  118.     cout << endl;
  119. }
  120.  
  121. //** FINE FUNZIONI **//
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement