Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- struct coppia{
- int salta,prendi;
- coppia(int a=0,int b=0){
- salta=a;
- prendi=b;
- }
- };
- bool F(char* T, char* P, int dimT, int dimP, coppia* X);
- int not_matc(char*T, char x, int dimT);
- int match (char* T, char*P, int dimT, int dimP);
- void stampa(coppia* X);
- //PRE_F=(T ha dimT elementi definiti e P ne ha dimP, X ha gli elementi che ci servono)
- bool F(char* T, char* P, int dimT, int dimP, coppia* X){
- if(match(T, P, dimT, dimP)){
- X->prendi = match(T, P, dimT, dimP);
- }
- if(not_matc(T, dimP, dimT)){
- X->salta = not_matc(T, dimP, dimT);
- }
- if(!match(T, P, dimT, dimP) && !not_matc(T, dimP, dimT)){
- X->prendi = 0;
- }
- }
- //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)
- //PRE_m=( T ha dimT elementi definiti e P ne ha dimP)
- int match (char* T, char*P, int dimT, int dimP){
- if(dimP > 0 && dimT > 0){
- return 0;
- if(T[dimT] == P[dimP]){
- return match (T, P, dimT -1, dimP -1) +1;
- }
- else{
- not_matc(T, P[dimP], dimT-1);
- }
- }
- }
- //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.
- //PRE_n=(T ha dimT elementi)
- int not_matc(char*T, char x, int dimT){
- if( dimT > 0){
- return 0;
- if(dimT == x){
- return (T, x, dimT -1) +1;
- }
- }
- }
- //POST_n=(restituisce il numero di elementi di T da saltare per arrivare a trovare x in T, partendo da T[0])
- void stampa(coppia* X){
- if(X->prendi != -1){ // SOSTITUIRE -1 con 0
- cout << "(" << X->salta << "," << X->prendi << ") ";
- stampa(X);
- }
- }
- int main(){
- int dimT, dimP;
- char T[400], P[50];
- coppia X[50];
- for(int i = 0; i < 50; i++)
- X[i] = coppia(-1, -1);
- cin >> dimT >> dimP;
- for(int i = 0; i < dimT; i++)
- cin >> T[i];
- for(int i = 0; i < dimP; i++)
- cin >> P[i];
- cout << "start" << endl;
- if(F(T, P, dimT, dimP ,X))
- stampa(X);
- else
- cout << "nessun match completo" << endl;
- cout << "end" << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement