Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] Funzione che conta le parole distinte di una stringa

    Salve ragazzi, ho un problema con questa funzione che dovrebbe oltre a contare le parole distinte di una stringa anche stamparle. Premetto che sono alle prime armi e non riesco proprio a capire dov'è l'errore.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define DIM 100
    
    
    
    
    int contaParoleDistinte(char[], char*[]);
    
    
    int main(int argc, char *argv[]) {
    	
    	char s[DIM], *token[DIM];
    	int i;
    	
    	printf("Inserire una stringa: (max %d caratteri) ", DIM);
    	gets(s);
    	
    	printf("La stringa e\' costituita da %d parole distinte\n", contaParoleDistinte(s, token));
    	printf("Le parole distinte individuate sono:\n");
    	for(i=0; i<contaParoleDistinte(s, token); i++){
    		puts(token[i]);
    	}
    		
    	system("pause");
    	return 0;
    }
    
    
    int contaParoleDistinte(char s[], char *token[]){
    	char *ptr;
    	int cont=0, i, trovato;
    	
    	ptr=strtok(s, " ");
    	token[cont]=malloc((strlen(ptr)+1)*sizeof(char));
    	strcpy(token[cont],ptr);
    	cont++;
    	
    	while(ptr!=NULL){
    				
    		for(i=0; i<cont; i++){
    			if(strcmp(token[i], ptr)==0)	{
    				trovato=1;
    				break;
    			}
    			else trovato=0;}
    		if(trovato=0){
    			token[cont]=malloc((strlen(ptr)+1)*sizeof(char));
    			strcpy(token[cont],ptr);
    			cont++;	}
    			
    		ptr=strtok(NULL, " ");	
    	}
    	return cont;	
    }
    Ultima modifica di MItaly; 30-05-2016 a 23:59

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Questa parte la modifichi così

    codice:
    int par = contaParoleDistinte(s, token);
    printf("La stringa e\' costituita da %d parole distinte\n", par);
    printf("Le parole distinte individuate sono:\n");
    for(i=0; i<par; i++)
       puts(token[i]);
    e nella funzione correggi la if così

    codice:
    if(trovato==0){
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    non mi ero proprio accorta di aver usato l'operatore di assegnamento invece di quello di uguaglianza...adesso funziona grazie mille

  4. #4
    Quote Originariamente inviata da rikki.95 Visualizza il messaggio
    non mi ero proprio accorta di aver usato l'operatore di assegnamento invece di quello di uguaglianza...adesso funziona grazie mille
    È un problema molto diffuso, difatti praticamente tutti i compilatori forniscono un warning in proposito... se stai usando un compilatore di famiglia gcc (MinGW su Windows) usa il flag -Wall, se usi VC++ specifica /W4.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Oppure scrivi

    if(0==trovato){
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Anche dette "Yoda conditions"
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    ahahahaha adesso è sicuro che non mi scorderò più di controllare gli if

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.