[C] Dubbio nell'interpretazione din un codice

di il
2 risposte

[C] Dubbio nell'interpretazione din un codice

Salve. Vi riporto qui sotto un pezzo di codice che permette di verficare se una parola è contenuta in un'altra.
Esempio:
parola1=importa
parola2=porta

Il programma in questo caso stampera un messaggio che conferma che seconda parola è contunuta della prima.

 flag=1;
    for(i=0; i <= strlen(str)-strlen(str2) && flag==1;i++){
        flag=0;
        for(j=0;j<strlen(str2) && flag==0;j++)
            if(str[i+j]!=str2[j])
                flag=1;
    }

    if (flag==1)
        printf("the first string does not contain the second one");
    else
        printf("the first string contains the second one");

Come da titolo del topic io non riesco proprio a capire la logica che sta dietro questo codice. Premetto che la soluzione è corretta e funzionante, inoltre è gia da un pò di tempo che cerco di capirlo ma niente, ho cercato una mia soluzione personale, che mi è riuscita, ma è molto meno elegante rispetto questa, che in ottica esame presenterebbe sicuramente meglio. Quindi qualcuno potrebbe spiegarmi la logica che ci sta dietro ?
Saluti,
Francesco

2 Risposte

  • Re: [C] Dubbio nell'interpretazione din un codice

    Ciao printf,
    questo codice è lo stesso del tuo, solo che il doppio for è stato diviso usando sue funzioni dal nome descrittivo e l' orribile variabile 'flag' è stata eliminata. È la stessa identica cosa solo che ora dovrebbe essere più chiaro. Una volta che l' hai capito puoi continuare ad usare il doppio for.
    
    bool ContainsFrom(char* s1, char* s2, int index)
    {
        for(int j = 0; j < strlen(s2); j++)
            if(s1[index + j] != s2[j])
                return false;
    
        return true;
    }
    
    bool Contains(char* s1, char* s2)
    {
        for(int i = 0; i <= strlen(s1) - strlen(s2); i++)
        {
    		if (ContainsFrom(s1, s2, i))
    			return true;
        }
    
    	return false;
    }
    
    int main (int argc, char* argv[]) 
    {
    	char* str = "importa";
    	char* str2 = "porta";
    
    	if (Contains(str, str2))
    		printf("the first string contains the second one");
    	else
    		printf("the first string does not contain the second one");
    
    	return 0;
    }
    
  • Re: [C] Dubbio nell'interpretazione din un codice

    Grazie mille barba59,
    il tuo codice mi è stato d'aiuto per capire il mio .
Devi accedere o registrarti per scrivere nel forum
2 risposte