Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    [C]Numero di parole uguali in una frase

    Ciao,
    devo fare un programma che conti le parole uguali in una frase, sole che ho già riscontrato un problema: appena inserisco la parola da confrntare e premo invo i programma si termina.
    codice:
    //Numero di parole uguali in una frase
    #include <stdio.h> 
    #include <string.h> 
    int main() 
    { 
       char parola [25];
       char frase [500];
       int cnt, tot=0; //cnt serve da contatore
       printf("Scrivi una parola: \n");
       scanf("%s", &parola[0]);
       printf("Scrivi una frase: \n");
       fgets(frase, 500, stdin); //La funzione fgets() legge una linea dallo stream immagazzinandola nel buffer puntato da s
       for (cnt = 0; cnt < strlen(frase); cnt++) //strlen() - calcola la lunghezza di una stringa 
       {
         if(frase[cnt] ==' ')
         tot++;
         else{}   
       }
       printf("\nIl numero totale di parole '%s'presenti nella frase sono: %d", parola, tot);         
       printf("\n\n"); 
       system ("pause");
       return 0;
    }
    Ciao e grazie in anticipo
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma questo codice non fa (logicamente) quello che chiedi.

    A che serve inserire la parola all'inizio ?

    Il ciclo serve a trovare il numero di parole nella frase ma non ha alcun riferimento con la parola inserita in precedenza (e comunque sbaglia ...)

    A cosa serve la else {} ?

    Che senso ha la frase finale?

    Per capirci, indica un esempio di frase e parola in input e cosa dovresti ottenere in output ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Esempio:
    Input parola da cercare: casa
    Input frase in cui cercare la parola: Vado a casa.
    Output: Il numero totale di parole è 3 e di uguaili a quella da cercare cene soono: 1

    Ho messo else{} perchè mi dava problemi se non ci mettevo le parentesi
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  4. #4
    Ho cercato di sistemrlo per renderlo leggermente più comprnsible:
    codice:
    //Numero di parole uguali in una frase
    #include <stdio.h> 
    #include <string.h> 
    int main() 
    { 
       char parola [25];
       char frase [500];
       int cnt, tot1=0, tot2=0; //cnt serve da contatore, tot1 indica il numero totale di parole mentra tot2 indica il numero di parole uguali
       printf("Scrivi una parola: \n");
       scanf("%s", &parola[0]);
       printf("Scrivi una frase: \n");
       fgets(frase, 500, stdin); //La funzione fgets() legge una linea dallo stream immagazzinandola nel buffer puntato da s
       for (cnt = 0; cnt < strlen(frase); cnt++) //strlen() - calcola la lunghezza di una stringa 
       {
         if(frase[cnt] ==' ')
         tot++;
         else{}   
       }
       printf("\nIl numero totale di parole presenti nella frase sono %d e di '%s' cene sono: %d",  tot1, parola, tot2);         
       printf("\n\n"); 
       system ("pause");
       return 0;
    }
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se non metti nulla per l'else non mettere proprio l'else.

    Inoltre, devi cercare la parola che inserisci nella frase e questa ricerca non la fai.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Ho messo else{} perchè mi dava problemi se non ci mettevo le parentesi
    Non serve metterci else{} se il blocco deve rimanere vuoto in quanto l'uso dell'if non implica l'else.

    Per fare quello che vuoi io userei innanzitutto un vettore dinamico; per contare le parole, basta contare gli spazi seguiti da un carattere che ci sono dentro il vettore e per contare le parole uguali, puoi, usando un ciclo ad esempio, vedere quante volte compaiono in sequenza i caratteri della parola che cerchi all'interno di due spazi.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se puoi usare funzioni di libreria, ti consiglio di dare un'occhiata a questa

    strstr
    http://www.cplusplus.com/reference/c...string/strstr/

    Inoltre cambia la riga

    scanf("%s", &parola[0]);

    in

    scanf("%s", parola);

    e aggiungi subito dopo una

    while(getchar()!='\n") ;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Ciao,
    ho provato a sistemarlo cercando di seguire i vostri consigli (senza però usare la strstrin quanto devo ancora capire bene come usarla).
    codice:
    //Numero di parole uguali in una frase
    #include <stdio.h> 
    #include <string.h> 
    int main() 
    { 
       char parola [25];
       char frase [500];
       int cnt, tot1=0, tot2=0; //cnt serve da contatore, tot1 indica il numero totale di parole mentra tot2 indica il numero di parole uguali
       printf("Scrivi una parola: \n");
       scanf("%s", &parola);
       while(getchar()!='\n');
       printf("Scrivi una frase: \n");
       fgets(frase, 500, stdin); //La funzione fgets() legge una linea dallo stream immagazzinandola nel buffer puntato da s
       for (cnt = 0; cnt < strlen(frase); cnt++) //strlen() - calcola la lunghezza di una stringa 
       {
         if(frase[cnt] ==' ')
         tot1++;
       }
       printf("\nIl numero totale di parole presenti nella frase sono %d e di '%s' cene sono: %d",  tot1, parola, tot2);         
       printf("\n\n"); 
       system ("pause");
       return 0;
    }
    Tralasciando il fatto che non ho ancora fatto il confronto, il codice risulta corretto?
    Inoltre non ho ben capito perchè abbia dovuto mettere
    codice:
    while(getchar()!='\n');


    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da 21Edoardo96
    ho provato a sistemarlo cercando di seguire i vostri consigli
    Lo hai compilato ? Lo hai eseguito ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Ciao,
    ho finito di leggere la strstr e a quanto pare sembra funzionarmi (il programma viene compilato ed eseguito senza probemi) , solo che non ho capito una cosa: cosa devo scrivere per far incrementare il tot2 a seconda delnumero di volte in cui la parola compare nella stringa?
    codice:
    //Numero di parole uguali in una frase
    #include <stdio.h> 
    #include <string.h> 
    int main() 
    { 
       char parola [25];
       char frase [500];
       int cnt, tot1=0, tot2=0; //cnt serve da contatore, tot1 indica il numero totale di parole mentra tot2 indica il numero di parole uguali
       printf("Scrivi una parola: \n");
       scanf("%s", &parola);
       while(getchar()!='\n');
       printf("Scrivi una frase: \n");
       fgets(frase, 500, stdin); //La funzione fgets() legge una linea dallo stream immagazzinandola nel buffer puntato da s
       for (cnt = 0; cnt < strlen(frase); cnt++) //strlen() - calcola la lunghezza di una stringa 
       {
         if(frase[cnt] ==' ')
         tot1++;
       }
       //La funzione strstr serve per verificare se esiste una sottostringa all'interno della stringa di partenza. 
       //La sua sintassi è char *strstr(const char *haystack, const char *needle);
       //Dove haystack (lett. 'pagliaio') è la stringa all'interno della quale cercare,
       //Mentre needle (lett.'ago') è la stringa da cercare. 
       
       //La funzione ritorna:
       //1)Un puntatore intero, che rappresenta la zona di memoria in cui è stata trovatala sottostringa, nel caso in cui la sottostringa dovesse essere trovata;
       //2)NULL nel caso in cui la sottostringa non dovesse essere trovata.
       if (strstr(frase,parola)) // Equivale a scrivere if (strstr(s1,s2) != 0) ovvero se il valore di ritorno della funzione non è NULL (cioè che ha trvato qualcosa)
       {
            printf ("Stringa \"%s\" trovata all'interno di \"%s\", inposizione %d\n",parola,frase,(strstr(frase,parola)-frase));
            tot2++;
       } 
         else //Entra nell'else se il valore di ritorno della funzione è NULL (cioè che non ha trovato niente)
            printf ("Stringa \"%s\" non trovata ““all'interno di \"%s\"\n",parola,frase);
       printf("\nIl numero totale di parole presenti nella frase sono %d e di '%s' cene sono: %d",  tot1, parola, tot2);         
       printf("\n\n"); 
       system ("pause");
       return 0;
    }
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

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.