Rimuovere parole con duplicati - C

di Anonimizzato27573 il
71 risposte

71 Risposte - Pagina 5

  • Vero
    un errore per me
  • StandardOil ha scritto:


    Visto che ormai sono state pubblicate tante versioni, compresa una corretta, pubblico la mia:
    int analizzastringa(char s[], char c, int a)
    {
       int i = 0;
    
       while(s[i])
       {
          a = a - (s[i++] == c);
       }
    
       return (!a);
    }
    ottima soluzione.
    Non è molto distante da quella che mi ero scritto io, che non avevo pubblicato,
    int analizzastringa(char s[], char c, int a)
    {
    	int i = 0;
    
    	while( s[++i] )
    	{
    		if( s[i] == c )
    		{
    			if( --a == 0 )
    				return 1;
    		}
    	}
    
    	return 0;
    }
    ...ma tu mi hai superato.
  • Grazie
  • Ciao,
    pubblico anch'io la mia versione a solo scopo didattico. Come ho già scritto sono un studente un po' in là con gli anni che sta facendo di tutto per imparare. Mi scuso se ritorno qui dopo giorni ma, come avrete letto, sono stato impegnato anch'io con un esercizio.

    Non ricordo benissimo nemmeno la logica con cui ho cominciato a scrivere il programma, ma oggi l'ho terminato così:
    
    //Autore
    #include <stdio.h>
    #include <string.h>
    
    #define dim 200
    #define dim1 1
    #define max_s 100
    
    
    int analizzastringa(char str[], char c, int conteggio);
    int main(){
    
    	char q[dim]={0};
    	FILE * fp;
    	char c='a';
    	
    	fp= fopen("ciao.txt", "r");
    	
    		if(fp==NULL){
    			printf("errore nell'apertura del file");
    		}else{
    			
    			while(fscanf(fp,"%s",q)!=EOF) {
    				
    					
    				if((analizzastringa(q,c,1)==1) && q[0]==c) {	
    					printf("%s ", q);
    				}else{
    				}	
    			}
    		}
    
    	fclose(fp);
    
    	return 0;
    		}
    
    
    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); //Se il numero è uguale a conteggio  ritorna 1
    else
    return (0);
    }
  • Non capisco questa riga
    
      if((analizzastringa(q, c, 1) == 1) && q[0] == c)
    
    cosa volevi fare?
  • StandardOil ha scritto:


    Non capisco questa riga
    
      if((analizzastringa(q, c, 1) == 1) && q[0] == c)
    
    cosa volevi fare?
    Fa in modo che mi restituisca parole che contengono la lettera che mi interessa, solo se questa è la prima lettera della parola e sia presente solo lì.
  • Ma c quanto vale in quella riga di codice? Perché non usate il debugger?
  • Aspetta, non ti seguo. A me funziona tutto. Io compilo, e se non mi dà errori, eseguo. Che cosa sbaglio?
  • antragorn ha scritto:



    Fa in modo che mi restituisca parole che contengono la lettera che mi interessa, solo se questa è la prima lettera della parola e sia presente solo lì.
    E la consegna è questa?
  • Forse ho capito!!!Deve stampare tutte le parole "in cui la lettera iniziale compare una sola volta", non solo quelle che indico io con un char!
    Forse...
  • Ci sei...
    adesso vedi di correggere la tua main() e vedi se va
    e poi faresti felice un vecchio (io) se tentassi un po' di ottimizzazione.....
  • Hahah Grazie StandardOil!! Ce la metterò tutta!!
Devi accedere o registrarti per scrivere nel forum
71 risposte