Confrontare stringhe di parole in una frase - C

di il
17 risposte

Confrontare stringhe di parole in una frase - C

Ciao, sta volta sono bloccato in questo esercizio...
la parte a) l'ho completata...
ma la b) è un po' più ostica, come faccio a far scorrere la stringa 2 una parola più avanti della stringa 1 per il confronto?
il codice che ho scritto io compila ma da un risultato strano...

/*a) Scrivere un sottoprogramma confrontastringhe che riceve come parametro due stringhe
str1 e str2. Il sottoprogramma stampa a video i caratteri uguali che si trovano nella stessa
posizione in entrambe le stringhe e restituisce il loro conteggio.
b) Scrivere un programma che apre un file di testo testo.txt contenente una serie di lunghezza
indefinita (zero o più) di parole ciascuna lunga al massimo 15 caratteri. Il programma legge ciascuna
parola contenuta nel file e la confronta con la sua precedente mediante l’invocazione del
sottoprogramma confrontastringhe (il primo confronto viene eseguito fra la prima e la seconda
parola). Il programma infine stampa a video la somma complessiva di tutti i caratteri comuni tra
ciascuna coppia di parole consecutive. Ad esempio, se il file contiene il seguente testo:
Gatto Gattini 120 10 alce dice bica informatica 34tre tre tr
Il programma stamperà a video: Gatt 1 ce ic tr ed infine stamperà il valore 11.
*/
#include <stdio.h>
#include <string.h>
#define dim 5
int confrontastringhe(char a[], char b[]){
	int	lena=strlen(a);
	int	lenb=strlen(b);
	int i;
	int len;
	int cont=0;
		if(lena<lenb){
			len=lenb;
		}else{
			len=lena;
		}

		for(i=0;i<len;i++){
			if(a[i]==b[i]){
				cont++;
			}
		}
	
	return cont;
}


int main(){
	
FILE* fp;
char str1[dim];
char str2[dim];
fp=fopen("parole.txt","r"); 

if(fp==NULL){ 
	printf("errore nell'apertura del programma");
}else{
	
	while(fscanf(fp,"%s %s",str1, str2)!=EOF){
	
		printf("%d ",confrontastringhe(str1,str2));

	}

}

return 0;	
}

17 Risposte

  • Re: Confrontare stringhe di parole in una frase - C

    A parte che dim dovrebbe essere 16 (15 caratteri più il terminatore nullo), potresti impostarlo così
    
    char str[dim] = {0};
    char str1[dim] = {0};
    char str2[dim] = {0};
    int parole = 0;
    [...]
        while(fscanf(fp,"%s",str)!=EOF){
    	strcpy(str1, str2);
    	strcpy(str2, str);
    	parole++;
    	if(parole > 1){
    	   printf("%d ",confrontastringhe(str1,str2));
    	   parole = 0;
    	}
        }
    
  • Re: Confrontare stringhe di parole in una frase - C

    Ciao weierstrass, per questo esercizio ho risolto.
    posto qui sotto la soluzione per chi la volesse:
    #include <stdio.h>
    #include <string.h>
    #define dim 16
    int confrontastringhe(char a[], char b[]){
    	int	lena=strlen(a);
    	int	lenb=strlen(b);
    	int i;
    	int len;
    	int cont=0;
    		if(lena<lenb){
    			len=lenb;
    		}else{
    			len=lena;
    		}
    
    		for(i=0;i<len;i++){
    			if(a[i]==b[i]){
    				cont++;
    				printf("%c", a[i]);
    			}
    		
    		}
    		printf(" ");
    	return cont;
    }
    
    
    int main(){
    	
    FILE* fp;
    int n[30];
    char str1[dim];
    char str2[dim];
    int conto;
    fp=fopen("parole.txt","r"); 
    
    if(fp==NULL){ 
    	printf("errore nell'apertura del programma");
    }else{
    	
    	while(fscanf(fp,"%s %s",str1, str2)!=EOF){
    	
    		conto=conto+confrontastringhe(str1, str2);
    
    	}
    	printf(" %d", conto);
    }
    fclose(fp);
    return 0;	
    }
  • Re: Confrontare stringhe di parole in una frase - C

    Scusa se te lo dico, ma mi sembra che tu non abbia risolto il probelma (svolto la consegna, diciamo così)
    tu non confronti ogni "parola" con la precedente, ma leggi 2 "parole" per volta e le confronti tra di loro, la prima con la seconda, ma mai la prima con la seconda della volta precedente
    ah, inoltre, non hai chiuso il file, vero è che subito dopo esci dal programma, ma non è bella cosa lasciare aperti i file
  • Re: Confrontare stringhe di parole in una frase - C

    Se faccio avanzare la stringa1 e la stringa2 allora la stringa1 prenderà il valore della stringa2 e la stringa2 proseguirà nella parola dopo, ed è esattamente come confrontare la prima con la seconda della volta precedente.

    il file mi sono dimenticato di chiuderlo solo qui, scusate... modifico subito.
  • Re: Confrontare stringhe di parole in una frase - C

    Hai un file da fare le prove?

    PS ho provato il tuo programma
    è sbagliato, come temevo
  • Re: Confrontare stringhe di parole in una frase - C

    A me funziona correttamente, che errore ti da a te?
    Allegati:
    27573_889760ec9f47df72b7db30a615ad8b93.png
    27573_889760ec9f47df72b7db30a615ad8b93.png
  • Re: Confrontare stringhe di parole in una frase - C

    A me, siccome hai dichiarato ma non inizializzato la variabile conto mi da tutte le volte un numero differente
    di più se non mi metti il file che usi per le prove non lo posso fare
    mettimi qui il file e vediamo
  • Re: Confrontare stringhe di parole in una frase - C

    Il mio è un semplice file .txt che ho creato al momento, nella foto che ho allegato ho inserito un immagine di cosa c'è scritto dentro(il riquadro in bianco), ma anche se cambio il contenuto del file il programma compila e funziona correttamente.

    comunque se il problema è solo la variabile conto basta che la inizializzi a 0, a me non da sto problema però.
  • Re: Confrontare stringhe di parole in una frase - C

    Che non dia problemi non significa che sia corretto

    allora le parole che usi per provare sono:
    ciao come va vattene via vittorio torino torino torino

    confermi?
  • Re: Confrontare stringhe di parole in una frase - C

    Esatto sono quelle parole
  • Re: Confrontare stringhe di parole in una frase - C

    Effettivamnte il tuo da:
    c va vi torino torino 17

    peccato che dovrebbe dare
    c va v vi torino torino 18

    se guardi anche tra "vattene" e "via" c'è una lettera in comune, la 'v' che a te non compare
  • Re: Confrontare stringhe di parole in una frase - C

    Strano che non compaia... non l'avevo notata, sai dirmi come mai?
  • Re: Confrontare stringhe di parole in una frase - C

    Te lo ho già detto, e lo hai ignorato

    e ne hai ancora uno di (piccolo) problema, anche se non è grave, solo un warning, ma..........
  • Re: Confrontare stringhe di parole in una frase - C

    Ho capito, ma logicamente il mio programma dovrebbe confrontare 2 parole alla volta ma stranamente salta solo quella v.
    proverò a rifarlo come dici tu e seguendo il metodo di weierstrass che mi ha scritto sopra.

    mi dici l'altro problema?
Devi accedere o registrarti per scrivere nel forum
17 risposte