Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    36

    C - qualcuno saprebbe spiegarmi questo esercizio?

    il testo dice:

    Scrivere una funzione char *maxpre(char *s1, char *s2) che ritorna in una stringa, allocata dinamicamente, il più lungo prefisso della stringa s1 che appare come sottostringa della stringa s2. La dimensione del blocco della stringa ritornata non deve essere più grande del necessario. Ecco alcuni esempi

    1) s1 = "la stringa" s2 = "nella strada" maxpre(s1, s2) ritorna "la str"
    2) s1 = "stringa" s2 = "parola" maxpre(s1, s2) ritorna ""
    3) s1 = "prefisso" s2 = "il pref" maxpre(s1, s2) ritorna "pref"

    ma io non capisco quello che devo fare, per prefisso intende tutte le lettere che sono in comune tra una parola e un'altra? es: "stringa" e "strada" è "str" perchè poi una ha la 'i' e l'altra ha la 'a', ma se così fosse che c'entra "la" nel risultato del primo esempio?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    s1 = "la stringa" s2 = "nella strada" maxpre(s1, s2) ritorna "la str"
    Spazio incluso.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    36
    ok grazie mille

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    36
    la funzione l'ho fatta in questo modo:

    codice:
    char *maxpre(char *s1, char *s2){
        char *s3=NULL;
        long int n1=strlen(s1), n2=strlen(s2);
        int k;
        int indiceI=0,indiceJ=0;
        long int min,max;
        
        if(n1<n2){
            min=n1;
            max=n2;
        }
        else{
            min=n2;
            max=n1;
        }
        
        for(int i=0;i<min;i++)
            for(int j=0;j<max;j++)
                if(s1[i]==s2[j]){
                    indiceI=i;
                    indiceJ=j;
                    k=0;
                    while(s1[indiceI]==s2[indiceJ] && indiceI<n1 && indiceJ<n2){
                        s3=realloc(s3,(k+1)*sizeof(char));
                        s3[k]=s1[indiceI];
                        indiceJ++; indiceJ++; k++;
                    }
                }
            
        
        return s3;
    }
    ma non funziona e non riesco ad uscirne fuori! qualcuno saprebbe aiutarmi?

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Cosa significa che non funziona?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    36
    che se ad esempio le due stringhe in input sono "la stringa" e "nella strada" in un primo momento il ciclo while funziona e registra nella stringa finale le lettere "la str" ma poichè c'è anche la lettera 'a' che le due stringhe hanno in comune, appena il ciclo for la incontra la sostituisce alla stringa "la str" che quindi viene sfasata completamente! non riesco a capire come poter "bloccare" l'iterazione in modo che non aggiunga qualsiasi lettera le due stringhe abbiano in comune

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.