C' erano diverse cose sbagliate:
if(!funzione)
cout<<"NON ";
ti sei dimenticato di inserire gli array di stringhe come parametri della funzione.
Nella funzione funzione non c'è bisogno di utilizzare due cicli for, ma ne basta uno se il ciclo lo fai in questo modo:
for(int j=0; j<N ;j++)
{
if(sottostringa(s1[j], s2[j]))
......
}
inoltre è sbagliato il modo in cui utilizzi l' istruzione if:
if(sottostringa(s1[i],s2[j]) && i==j)
condizione=true;
devi sfruttare una variabile contatore che tiene conto del numero di volte che la funzione sottostringa ritorna true, facendo in questo modo:
int contatore=0;
for(int j=0; j<N ;j++)
{
if(sottostringa(s1[j], s2[j]))
contatore++;
}
if(contatore==N)
condizione=true;
Mentre nella funzione sottostringa non c'è bisogno di utilizzare questo ciclo for:
for(int i=0;i<=(ly-lx) && !test;i++)
{
if(y.substr(i,lx)==x){
test=true;
}
}
ma basta usare una istruzione if in questo modo:
bool test=false;
if(y.substr(0,lx)==x || y.substr(ly-lx,lx)==x)
test=true;
Pertanto il programma corretto è il seguente:
#include<iostream>
#include<string>
using namespace std;
const int N=4;
bool sottostringa(string, string);
bool funzione(string [N],string [N]);
int main()
{
string s1[N]={"giorno","maschio","ladro","aglio"};
string s2[N]={"buongiorno","maschione","ladrona","sbaraglio"};
if(!funzione(s1, s2))
cout<<"NON ";
cout<<" E' VERIFICATA LA CONDIZIONE DELL'ESERCIZIO"<<endl;
return 0;
}
bool sottostringa(string x,string y)
{
int lx=x.length();
int ly=y.length();
bool test=false;
if(y.substr(0,lx)==x || y.substr(ly-lx,lx)==x)
test=true;
return test;
}
bool funzione(string s1[N], string s2[N])
{
bool condizione=false;
int contatore=0;
for(int j=0; j<N ;j++)
{
if(sottostringa(s1[j], s2[j]))
contatore++;
}
if(contatore==N)
condizione=true;
return condizione;
}
Matteo