Rimuovere parole con duplicati - C

di il
71 risposte

71 Risposte - Pagina 2

  • Re: Rimuovere parole con duplicati - C

    Ok forse ho capito, appena finisco provo a postare quel che sono riuscito a fare
  • Re: Rimuovere parole con duplicati - C

    int analizzastringa(char s[]){
    	int i;
    	int len;
    	int conteggio=0;	
    	int risultato=0;
    	len=strlen(s);
    	
    	for(i=0; i<len; i++){
    		if(s[0]==s[i]){
    			conteggio++;			
    		}	
    	}
    	
    	if(conteggio==2){
    		risultato=1;
    		}else{
    		risultato=0;
    		}
    		
    		return risultato;
    	
    }
    
    int main(){
    
    	char q[dim+1];
    	FILE * fp;
    
    	
    	fp= fopen("ciao.txt", "r");
    	
    		if(fp==NULL){
    			printf("errore nell'apertura del file");
    		}else{
    			
    			while(!feof(fp)) {
    				fgets(q, 20, fp);	
    				if(analizzastringa(q)==0){
    					printf("%s", q);
    				}else{
    				}	
    			}
    		}
    
    	fclose(fp);
    
    	return 0;
    }
    ciao ho cambiato il codice, ma il programma non funziona... continua a stamparmi tutta la frase senza cancellare nessuna parola, sai per caso dove sbaglio?
  • Re: Rimuovere parole con duplicati - C

    Consiglio: la funzione basta che sia [Code] int funzione (char stringa[]) { for (int i=1;stringa [i]!=0;i++) if (stringa [0]==stringa[i]) return 0; return 1; }
  • Re: Rimuovere parole con duplicati - C

    Come mai quell'aggiunta? potresti spiegarmela? anche se la uso il programma non funziona... sai per caso dove sbaglio?
  • Re: Rimuovere parole con duplicati - C

    Ne dubito, visto che con questo input questo programma da questo output. Se la mia funzione non funziona... Il problema non é qui.
    Allegati:
    26916_ba350db0ec13cfd10260ccf639392f57.jpg
    26916_ba350db0ec13cfd10260ccf639392f57.jpg

    26916_7e5efd49658dfdb39e9d2459143455d0.png
    26916_7e5efd49658dfdb39e9d2459143455d0.png

    26916_b499507f8de98c48999d4daa9067f572.jpg
    26916_b499507f8de98c48999d4daa9067f572.jpg
  • Re: Rimuovere parole con duplicati - C

    ragazzo1223 ha scritto:


    ciao ho cambiato il codice, ma il programma non funziona...
    Ovviamente non funziona.
    Weierstrass ti ha appena offerto una soluzione corretta, perché non l'hai adottata? Non l'hai capita? Cosa non hai capito della soluzione che ti è stata offerta?

    Inoltre, da quel che scrivi sembra che tu non abbia le idee chiare sul compito che dovrebbe svolgere il tuo codice, o forse hai fatto confusione con un altro esercizio? Perché parli di cancellare parole? Anche il titolo del thread: "Rimuovere parole con duplicati" è in disaccordo con il testo del tuo esercizio che chiede un'altra cosa. Non perdere il tuo tempo a generare confusione, fissa i tuoi obiettivi in modo razionale altrimenti non giungerai mai ad una soluzione. In altri termini, dovrai decidere cosa deve fare il tuo programmino.
  • Re: Rimuovere parole con duplicati - C

    Cosa chiede il programma io l'ho capito, ho inserito pure il testo dell'esercizio per non avere fraintendimenti.
    non mi è chiara la funzione: int controlla(char [s]) potrei avere una spiegazioe di quel che ha fatto qui?

    e poi cosa vuol dire:
    char riga[STRSIZE]={0} perchè lo eguagli a {0}? non mi è chiara sta cosa...
  • Re: Rimuovere parole con duplicati - C

    For, if e while eseguono solo l'istruzione successiva. La for ha per per istruzione successiva la if, che ha per istruzione successiva la return 0. La for comincia da 1 e fa controllare se l'i esimo carattere della stringa é uguale al primo. Se é cosí significa automaticamente che esiste un doppione di quel carattere (il primo carattere sarå sempre uguale a se stesso ). La return 1 é dopo for e if, dentro solo nella funzione, e verrå eseguita solo se non entro mai nella if, perché in tal caso ho l'altra return. Ma questi "trucchi" dovrebbero essere banali.

    Inoltre uguaglio a zero un array perché TUTTE le variabili non globali vanno inizializate. Dovrebbe essere una delle prime cose che si imparano.

    Comunque dovresti anche avere capito che ho sbagliato la funzione, visto che deve avere in ingresso anche un numero e il carattere con cui confrontare la stringa
  • Re: Rimuovere parole con duplicati - C

    In che senso è sbagliata? char stringa[] non confronta se stessa? e che numero va dato nella funzione?
    mi sto un attimo confondendo
  • Re: Rimuovere parole con duplicati - C

    ragazzo1223 ha scritto:


    Cosa chiede il programma io l'ho capito
    E allora tieniti la soluzione sbagliata, contento tu...
  • Re: Rimuovere parole con duplicati - C

    ragazzo1223 ha scritto:


    Cosa chiede il programma io l'ho capito, ho inserito pure il testo dell'esercizio per non avere fraintendimenti.
    Allora fammi capire perché hai parlato di eliminare parole o di "rimuovere parole con duplicati", quando l'esercizio ti chiede di verificare le ricorrenze di un singolo carattere all'interno di una stringa di testo?

    Weierstrass ti ha dato una soluzione funzionante, perché l'hai modificata in modo da non farla funzionare? Il testo dell'esercizio ti chiede una funzione "analizzastringa" che prende tre parametri, ma tu hai riscritto la funzione in modo che ne prenda uno solo. C'è un motivo?
  • Re: Rimuovere parole con duplicati - C

    Perché pensavo che dentro la funzione bastasse solo quel parametro visto che deve fare il controllo su se stessa.

    sono alle prime armi, la soluzione di weierstrass non l'ho capita... magari con una piccola spiegazione potrei arrivarci, ciò che voi trovate banale sfortunatamente per me non lo è.
  • Re: Rimuovere parole con duplicati - C

    Ho provato come mi ha detto weirstrass:
    #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],1)==0){	
    					printf("%s", q);
    				}else{
    				}	
    			}
    		}
    
    	fclose(fp);
    
    	return 0;

    ma il codice non funziona, dove ho sbagliato adesso? ho seguito tutti i vostri consigli ma il programma non va...
  • Re: Rimuovere parole con duplicati - C

    Ciao,
    per il punto 1 io ho creato questo codice:
     #include <stdio.h>
    #include <string.h>
    
    int analizzastringa(char str[], char c, int conteggio);
    main()
    {
    
    char str_attuale[100]="Come va? Tutto ok?";
    char c_attuale='o';
    int conteggio_attuale=3;
    int risultato;
    
    risultato=analizzastringa(str_attuale, c_attuale, conteggio_attuale);
    printf("%d", risultato);
    }
    
    
    int analizzastringa(char str[], char c, int conteggio)
    {
    int i;
    int lunghezza_stringa;
    int contatore_caratteri=0;
    lunghezza_stringa=strlen(str);
    
    for (i=0; i<lunghezza_stringa; i++)
    if(str[i]==c) contatore_caratteri++;
    
    if(contatore_caratteri==conteggio) return (1);
    else
    return (0);
    }
    
    Ovviamente per brevità le stringhe e le altre variabili le ho assegnate io senza prevedere un inserimento utente. Ho inserito una printf per capire al volo se il tutto girava. Credo che anche il nome delle variabili non sia conforme; però gira, quindi basta personalizzarlo.
  • Re: Rimuovere parole con duplicati - C

    Ciao, grazie per quest'altra soluzione del punto 1, ma il mio problema sta nel punto 2... ho riprovato a scrivere il codice cercando di seguire le guide degli altri utenti:
    #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],1)==0){	
    					printf("%s", q);
    				}else{
    				}	
    			}
    		}
    
    	fclose(fp);
    
    	return 0;
    ma senza buoni risultati, per caso sai come migliorarlo per far in modo che funzioni?
Devi accedere o registrarti per scrivere nel forum
71 risposte