Rimuovere parole con duplicati - C

di il
71 risposte

Rimuovere parole con duplicati - C

Ciao, ho un piccolo problema con questo esercizio:

a) Scrivere un sottoprogramma C analizzastringa che riceve come parametri un array di
caratteri str, un carattere c ed un intero conteggio. Il sottoprogramma conta il numero di caratteri
uguali a c in str. Se il numero è uguale a conteggio, il sottoprogramma ritorna 1, altrimenti
ritorna 0.
b) Scrivere un programma C 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 analizza
ciascuna parola mediante il sottoprogramma analizzastringa e stampa a video le parole in cui
la lettera iniziale compare una sola volta. Nota: si considerino una lettera minuscola e la
corrispondente maiuscola diversi. Ad esempio, se il file contiene la seguente sequenza:
A a alla Ad --- Esempio
Il programma stamperà a video:
A a Ad --- Esempio


la parte a) l'ho fatta velocemente:
#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;	
	len=strlen(s);
	int risultato;
	for(i=0; i<len; i++){
		if(c[0]==s[i]){
			conteggio++;			
		}	
	}
	
	if(conteggio==a){
		risultato=1;
		}else{
		risultato=0;
		}
		
		return risultato;
	
}

int main(){

	char a[dim+1];
	char b[dim1+1];
	int c;


	printf("scrvi una frase \n");	
	fgets(a, dim+1, stdin);

	printf("scrivi una lettera: ");
	fgets(b,dim1+1,stdin);
	
	printf("scrivi un numero: ");
	scanf("%d", &n);
	
	printf("risultato:");
	printf("%d", analizzastringa(a,b,n));

	return 0;
}
ma non riesco a capire la parte b) come faccio a scorrere un FILE e fargli capire che ad ogni inizio parola deve prendere la prima lettera e verificare che non ci siano ripetizioni?

71 Risposte

  • Re: Rimuovere parole con duplicati - C

    Metti i tag code nel codice
  • Re: Rimuovere parole con duplicati - C

    Fatto, non mi era chiaro come metterlo all'inizio
  • Re: Rimuovere parole con duplicati - C

    Devo purtroppo darti una delusione
    non sei riuscito nemmeno a realizzare il punto 1
    leggilo bene e vedrai che ho ragione
  • Re: Rimuovere parole con duplicati - C

    Hai ragione, l'ho fatto disattentamente... pensavo chiedesse un programma che contasse quante lettere fossero uguali alla lettera che inserivo da tastiera.
    ma non è difficile da aggiustare, rimane comunque il punto 2... ho letto ovunque ma non mi è chiaro come scorrere i FILE utilizzando quel sottoprogramma.

    edit: ho aggiustato il programma.
  • Re: Rimuovere parole con duplicati - C

    Non è difficile ma intanto hai sbagliato ancora. c deve essere un char, non un array di char
  • Re: Rimuovere parole con duplicati - C

    Qui la documentazione di fgets combinato con fopen

    http://www.cplusplus.com/reference/cstdio/fgets
    #include <stdio.h>
    
    int main()
    {
       FILE * pFile;
       char mystring [100];
    
       pFile = fopen ("myfile.txt" , "r");
       if (pFile == NULL) perror ("Error opening file");
       else {
         if ( fgets (mystring , 100 , pFile) != NULL )
           puts (mystring);
         fclose (pFile);
       }
       return 0;
    }
    
  • Re: Rimuovere parole con duplicati - C

    Come mai è sbagliato utilizzare un array di char? a scuola non ci hanno insegnato l'ottimizzazione di un programma C, io tanto prendo il primo carattere dell'array così vado sul sicuro.

    edit: a parte quell'errore del char, io non capisco proprio come scorrere un FILE, ho letto ovunque e non capisco il procedimento.
  • Re: Rimuovere parole con duplicati - C

    Ma che c'entra l'ottimizzazione? Perché usi un array se ti chiedono una lettera?
    
    char b;
    
    printf("scrivi una lettera: ");
    scanf(" %c", &b);
    
    Esattamente come hai fatto per lo scanf sull'intero n che non hai dichiarato (non hai compilato, vero?)

    Per il secondo punto non capisci o non vuoi provare? Ti ho postato sopra come si apre un file e si leggono i caratteri, devi solo cambiare il nome del file e il numero massimo di caratteri che metti nell'array. Fai un file dove vai a capo dopo ogni parola, fai un while al posto dell'if fino a quando fgets ti ritorna un puntatore a NULL e prova.
    Se non ti piace fgets ci sono altre funzioni
  • Re: Rimuovere parole con duplicati - C

    Scusa hai ragione, ho dimenticato il "int n;"

    comunque non è che non voglio provare, perché ci sto sto provando da un bel po'... non mi è chiaro il procedimento... al posto del fgets si può utilizzare lo fscanf?
  • Re: Rimuovere parole con duplicati - C

    
    while(fscanf(...) != EOF) {
     [...]
    }
    
  • Re: Rimuovere parole con duplicati - C

    Con fscanf scorro il file parola per parola, ma come faccio a far capire al programma che deve prendere la prima lettera di ogni parola e vedere se si ripete? c'è una funzione?
  • Re: Rimuovere parole con duplicati - C

    Ma scusa, non avevi scritto c[0] nel primo esempio? E non è il primo carattere? Ma li hai fatti tu questi esercizi? Devi usare la stessa funzione che hai usato prima...
  • Re: Rimuovere parole con duplicati - C

    Si li ho fatti io... tu mi avevi detto che usare un array di caratteri era sbagliato.
    mi sto un attimo confondendo.
  • Re: Rimuovere parole con duplicati - C

    
    int analizzastringa(char s[], char c, int a){
    	int i;
    	int len=strlen(s);
    	int conteggio=0;	
    	for(i=0; i<len; i++)
    		if(c==s[i])
    			conteggio++;					
    	if(conteggio==a)
    		return 1;		
    	return 0;
    }
    
    
    analizzastringa(a,a[0],1)
    
Devi accedere o registrarti per scrivere nel forum
71 risposte