Programma che conta parole e lettere,funziona ma con un prob

di il
7 risposte

Programma che conta parole e lettere,funziona ma con un prob

Ho scritto questo programma che legge una stringa e conta sia il numero di parole che il numero di lettere,eccolo, il programma funziona :
#include <iostream>
using namespace std;
void conta_parole()
{char car;
int cont = 1;
while (cin.get(car))
{
if((car == ' ')||(car == '\n')) ++cont;
if (car == 'x')
break;}
cout<<cont<<' '<<"parole"<<endl;}
void conta_lettere()
{char car;
int comt = 0;
while (cin.get(car))
{
if((car != ' ')||(car != ',')) ++comt;
if (car == 'x')
break;}
cout<<--comt<<' '<<"lettere"<<endl;}
int main()
{conta_parole();
conta_lettere();
system("pause");
return 0;
}
il mio problema però è uno,io vorrei scrivere una stringa una sola volta e poi contare sia le parole che lettere,invece come ho scritto io devo scriverla due volte,ho provato a mettere un'altra funzione in cui inserisco una stringa ma il problema rimane,come fare?

7 Risposte

  • Re: Programma che conta parole e lettere,funziona ma con un prob

    Ciao,

    forse non ho capito bene cosa vuoi fare ma non potresti leggere nel main la stringa e poi passarla alle due funzioni?
  • Re: Programma che conta parole e lettere,funziona ma con un prob

    Ho provato così ma non va,me lo potresti correggere sul programma?grazie mille
    #include <iostream>
      using namespace std;
      void conta_parole(char car, int &cont)
    {
     cont = 1;
    while((car == ' ')||(car == '\n')){ ++cont;
    if (car == 'x')
    break;
    }}
    void conta_lettere(char car, int &comt)
    { comt = 0;
    while((car != ' ')||(car != ',')){ ++comt;
    if (car == 'x')
    break;}}
    
    int main()
    {int coht;
    int coz;
    char c;
    cout<<"immetti stringa"<<endl;
    while (cin.get(c))
    {
    conta_parole(c, coht);
    conta_lettere(c, coz);
    if (c == 'x')
    break;}
    cout<<coht<<endl<<coz;
    system("pause");
    return 0;
    }
  • Re: Programma che conta parole e lettere,funziona ma con un prob

    Forse è meglio cercare di ragionare insieme non credi?

    Tu vuoi un programma che conta le parole e le lettere di una frase che scrivi giusto?

    Il metodo cin.get prende un carattere alla volta e lo copia nella variabile che gli passi come argomento ma, non vorrei dire cavolate , non si ferma mai!

    Mi spiego meglio: se non poni una condizione del tipo "c== '\n' " nel while quel ciclo mi sa che non si ferma mai.

    Considerando poi che dovresti prima leggere con cin.get e poi fare il confronto nel while un'idea potrebbe essere trasformare il while in un do-while, capito cosa intendo?

    Passiamo al conteggio delle lettere (ricordati di inizializzare sempre i relativi contatori!): l'unico carattere per cui non si deve incrementare il contatore è lo spazio ( ' ' ).
    Quindi nel corpo della funzione potresti prevedere di incrementare solo se il carattere preso in input non è uno spazio.

    Attenzione agli argomenti: se passi il contatore (che è un intero) alla funzione e vuoi che l'incremento all'interno della funzione abbia effetto devi passarlo per riferimento, questo vuol dire che nel prototipo della funzione devi dichiaralo come int *, ovvero un puntatore ad un intero e, all'interno della funzione, devi utilizzarlo ricordandoti di deferenziarlo: *cont++ e non cont++. Analogmanete nel chiamare la funzione: devi passere l'indirizzo della variabile: &coht non coht.

    Per la funzione che conta le parole direi che puoi segure lo stesso procedimento
  • Re: Programma che conta parole e lettere,funziona ma con un prob

    Guarda ho risolto,te lo scrivo:
    #include <iostream>
      using namespace std;
      void conta_parole(char car, int &cont)
    {
    if((car == ' ')||(car == '\n'))
    { ++cont;
    }}
    void conta_lettere(char car, int &comt)
    { 
    if((car != ' ')&&(car != ',')&&(car != '\n'))
    { ++comt;}}
    int main()
    {int coht = 1;
    int coz = 0;
    char c;
    cout<<"immetti stringa"<<endl;
    while (cin.get(c))
    {
    conta_parole(c, coht);
    conta_lettere(c, coz);
    if (c == 'x')
    break;}
    cout<<coht<<endl<<--coz;
    system("pause");
    return 0;
    }
  • Re: Programma che conta parole e lettere,funziona ma con un prob

    Bene allora

    anche se non ho capito bene cosa volevi ottenere a questo punto
  • Re: Programma che conta parole e lettere,funziona ma con un prob

    Volevo solo che il programma mi facesse scrivere una frase e subito dopo sotto mi comparisse il numero di parole e lettere,ho postato un'altra domanda perchè mi è venuto un dubbio,puoi guardarla?grazie
  • Re: Programma che conta parole e lettere,funziona ma con un prob

    Intendi un'altra discussione?
    P.s. ma allora cos'è quell' if(c=='x')
Devi accedere o registrarti per scrivere nel forum
7 risposte