Advertisement
Guest User

Untitled

a guest
Apr 26th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.28 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct coppia{
  6.     int salta,prendi;
  7.     coppia(int a=0,int b=0){
  8.         salta=a;
  9.         prendi=b;
  10.     }
  11. };
  12. bool F(char* T, char* P, int dimT, int dimP, coppia* X);
  13. int not_matc(char*T, char x, int dimT);
  14. int match (char* T, char*P, int dimT, int dimP);
  15. void stampa(coppia* X);
  16.  
  17. //PRE_F=(T ha dimT elementi definiti e P ne ha dimP, X ha gli elementi che ci servono)
  18. bool F(char* T, char* P, int dimT, int dimP, coppia* X){
  19.     if(match(T, P, dimT, dimP)){
  20.         X->prendi = match(T, P, dimT, dimP);
  21.     }
  22.     if(not_matc(T, dimP, dimT)){
  23.         X->salta = not_matc(T, dimP, dimT);
  24.     }
  25.     if(!match(T, P, dimT, dimP) && !not_matc(T, dimP, dimT)){
  26.         X->prendi = 0;
  27.     }
  28.    
  29. }
  30. //POST_F=(restituisce true se esiste un match completo (con eventuali buchi) d P in T e, se il match c’è, X contiene le coppie che corrispondono al match)
  31.  
  32.  
  33. //PRE_m=( T ha dimT elementi definiti e P ne ha dimP)
  34. int match (char* T, char*P, int dimT, int dimP){
  35.     if(dimP > 0 && dimT > 0){
  36.         return 0;
  37.         if(T[dimT] == P[dimP]){
  38.             return match (T, P, dimT -1, dimP -1) +1;
  39.         }
  40.         else{
  41.             not_matc(T, P[dimP], dimT-1);
  42.         }
  43.     }
  44. }
  45. //POST_m=(deve restituire la lunghezza del massimo prefisso di P che matcha a partire da T[0] in posizioni contigue, cioè senza buchi) Si osservi che match può restituire 0.
  46.  
  47. //PRE_n=(T ha dimT elementi)
  48. int not_matc(char*T, char x, int dimT){
  49.     if( dimT > 0){
  50.         return 0;
  51.         if(dimT == x){
  52.             return (T, x, dimT -1) +1;
  53.         }
  54.     }
  55. }
  56. //POST_n=(restituisce il numero di elementi di T da saltare per arrivare a trovare x in T, partendo da T[0])
  57.  
  58. void stampa(coppia* X){
  59.     if(X->prendi != -1){ // SOSTITUIRE -1 con 0
  60.         cout << "(" << X->salta << "," << X->prendi << ") ";
  61.         stampa(X);
  62.     }
  63. }
  64.  
  65. int main(){
  66.   int dimT, dimP;
  67.   char T[400], P[50];
  68.   coppia X[50];
  69.   for(int i = 0; i < 50; i++)
  70.     X[i] = coppia(-1, -1);
  71.   cin >> dimT >> dimP;
  72.  
  73.   for(int i = 0; i < dimT; i++)
  74.     cin >> T[i];
  75.   for(int i = 0; i < dimP; i++)
  76.     cin >> P[i];
  77.   cout << "start" << endl;
  78.   if(F(T, P, dimT, dimP ,X))
  79.     stampa(X);
  80.    else
  81.     cout << "nessun match completo" << endl;
  82.   cout << "end" << endl;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement