Rimuovere parole con duplicati - C

di il
71 risposte

71 Risposte - Pagina 3

  • Re: Rimuovere parole con duplicati - C

    ragazzo1223 ha scritto:


    Ho provato come mi ha detto weirstrass:
    ma il codice non funziona, dove ho sbagliato adesso? ho seguito tutti i vostri consigli ma il programma non va...
    Cosa vuol dire che non funziona?
    Non compila, fallisce o non da i risultati che ti aspetti?
    Il codice che hai scritto in questo modo funziona, ho solo dovuto aggiungere la parentesi graffa di chiusura.
    Non da i risultati voluti per via del fatto che tu hai scritto:
    				if(analizzastringa(q,q[0],1)==0){	
    					printf("%s", q);
    				}else{
    				}
    In questo modo ti stampa la stringa di ogni riga solo se la funzione ritorna zero.
    Hai compreso come ottenere il risultato voluto?
  • Re: Rimuovere parole con duplicati - C

    Unqualunque ha scritto:


    ragazzo1223 ha scritto:


    Ho provato come mi ha detto weirstrass:
    ma il codice non funziona, dove ho sbagliato adesso? ho seguito tutti i vostri consigli ma il programma non va...
    Cosa vuol dire che non funziona?
    Non compila, fallisce o non da i risultati che ti aspetti?
    Il codice che hai scritto in questo modo funziona, ho solo dovuto aggiungere la parentesi graffa di chiusura.
    Non da i risultati voluti per via del fatto che tu hai scritto:
    				if(analizzastringa(q,q[0],1)==0){	
    					printf("%s", q);
    				}else{
    				}
    In questo modo ti stampa la stringa di ogni riga solo se la funzione ritorna zero.
    Hai compreso come ottenere il risultato voluto?
    Grazie ancora per la risposta, ma se la funzione ritorna 0 è perché in quella parola non ha contato più di una volta nessuna vocale/consonante ripetuta
    per esempio se io immetto:
    sasso- la prima lettera si ripete altre 2 volte, quindi dovrebbe ritornare 1 per il programma che ho scritto io, perciò non dovrebbe stamparmi quella riga.
    se invece ritorna 0 allora il programma può stamparmi a video la parola.

    sbaglio in questo punto?
  • Re: Rimuovere parole con duplicati - C

    La stringa q che hai ottenuto dalla fgets è una intera riga del testo, per cui la funzione analizzastringa cerca l'occorrenza nell'intera riga, non per una sola parola. Se vuoi stampare a video ogni parola che non contiene una ripetizione della prima lettera, dovresti passare alla funzione analizzastringa una parola alla volta e non una riga alla volta.
  • Re: Rimuovere parole con duplicati - C

    Aggiornamento, ho copiato lo stesso codice su un altro computer e stranamente funziona... Non ne capisco il motivo sinceramente, strano.
    Grazie a tutti per l'aiuto, siete stati gentilissimi.
    Se qualche altro utente ha bisogno della soluzione la trova 2 post prima di questo messaggio
  • Re: Rimuovere parole con duplicati - C

    Provalo bene. Sei sicuro che fa bene tutto quello che deve fare?
  • Re: Rimuovere parole con duplicati - C

    Si si, fa esattamente quello che deve fare.
    ho cambiato anche il contenuto del file più volte e funziona perfettamente
  • Re: Rimuovere parole con duplicati - C

    Per lo OP:
    Ho provato il tuo programma, con i dati di esempio
    Non va.........

    specifico: compila ed esegue, ma sbaglia
  • Re: Rimuovere parole con duplicati - C

    Cosa ti sbaglia ?

    edit:
    mi sono accorto ora che il programma che ho inserito qui era quello sbagliato, ho per sbaglio copiato la soluzione errata, scusatemi.

    questa dovrebbe funzionare:
    #include <string.h>
    #include <stdio.h>
    #define dim 20
    #define dim1 1
    #define max_s 100
    
    
    
    
    
    int analizzastringa(char s[], char c, int a ){
    	int i;
    	int len;
    	int conteggio=0;	
    	int risultato=0;
    	len=strlen(s);
    	
    	for(i=0; i<len; i++){
    		if(c==s[i]){
    			conteggio++;			
    		}	
    	}
    	
    	if(conteggio>=a){
    		risultato=1;
    		}else{
    		risultato=0;
    		}
    		
    		return risultato;
    	
    }
    
    int main(){
    
    	char q[dim]={0};
    	FILE * fp;
    
    	
    	fp= fopen("ciao.txt", "r");
    	
    		if(fp==NULL){
    			printf("errore nell'apertura del file");
    		}else{
    			
    			while(fscanf(fp,"%s",q)!=EOF) {
    				
    					
    				if(analizzastringa(q,q[0],2)==0){	
    					printf("%s", q);
    					printf(" ");
    				}else{
    				}	
    			}
    		}
    
    	fclose(fp);
    
    	return 0;
    }
  • Re: Rimuovere parole con duplicati - C

    Questo è un esempio di come continuando a sbagliare, o prima o dopo, per caso, capita una cosa che sembra giusta
    il programma è sbagliato, chiaramente, basterebbe un minimo di analisi per rendersene conto
    eppure fa la cosa giusta (o almeno sembra farla abbastanza spesso, non ho indagato a fondo)
    perché almeno due errori si compensano a vicenda
    incredibile....
    per lo OP:
    ma chi te li da questi testi? che non sono chiarissimi
  • Re: Rimuovere parole con duplicati - C

    Anche il nuovo codice è sbagliato? in che punto è sbagliato?

    comunque questo è preso da un esercizio di un pdf che ho preso dalla pagina del prof.
  • Re: Rimuovere parole con duplicati - C

    Ma la funzione analizzastringa() la hai provata?
    Perché se non ti metti a fare un po' di analisi dei tuoi programmi i tuoi problemi non li trovi più
  • Re: Rimuovere parole con duplicati - C

    Si l'ho provata, a me funziona benissimo con tutti i testi che ho messo fino ad adesso...
  • Re: Rimuovere parole con duplicati - C

    No
    Non funziona benissimo
    Prova
    Stringa aaa
    Carattere a
    Numero 1

    Dimmi cosa restituisce
  • Re: Rimuovere parole con duplicati - C

    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #define dim 20
    #define max_s 100
    
    
    
    
    
    int analizzastringa(char s[], char c, int a ){
    	int i;
    	int len;
    	int conteggio=0;	
    	int risultato;
    	len=strlen(s);
    	
    	for(i=0; i<len; i++){
    		if(s[i]==c){
    			conteggio++;			
    		}	
    	}
    	
    	if(conteggio<a){
    		risultato=1;
    		}else{
    		risultato=0;
    		}
    		
    		return risultato;
    	
    }
    
    int main(){
    
    	char riga[dim]={0};
    	FILE * fp;
    
    	
    	fp= fopen("ciao.txt", "r");
    	
    		if(fp==NULL){
    			printf("errore nell'apertura del file");
    		
    		}else{
    			
    			while(fscanf(fp,"%s",riga)!=EOF) {	
    				if(analizzastringa(riga,riga[0],2)==1){	
    					printf("%s ", riga);
    				}else{
    				}	
    			}
    		}
    
    	fclose(fp);
    
    	return 0;
    }
    Dimmi se questa versione del programma ti va invece
  • Re: Rimuovere parole con duplicati - C

    No, dimmi tu se hai provato come ti ho detto

    Non è questione se piace o se non piace

    È questione se fa quello che deve oppure no

    E si sa provando
    Prova
Devi accedere o registrarti per scrivere nel forum
71 risposte