Contare le vocali

di Anonimizzato7811 il
14 risposte
È un programmino che conta quante vocali ci sono in una stringa,il problema è che il programmino mi conta solo quanti tipi di vocali ci sono e non quante,ad esempio,se scrivo "che bello" il programma me ne conta 2 e non 3,dove ho sbagliato?è questo:
int leggi(char b[]){
int contatore = 0;
int vocali[5] = {'a','e','i','o','u'};
for(int n = 0; n<250; n++)
for(int i= 0;i<5;i++){
if(b[n] == vocali [i])
contatore++;}
return contatore;
}

14 Risposte

  • Non vedo errori io quà. strano ma vero . Le vocali per correttezza non potevi definirli come un array di char?
  • È solo che come ti ho detto ho quel problema lì,anche se metto char è la stessa cosa,ti metto il programma completo:
    #include <iostream>
      using namespace std;
      void leggi_nome_file(char a[]){
      cin>>a;
      }
    int leggi(char b[]){
    int contatore = 0;
    char vocali[5] = {'a','e','i','o','u'};
    for(int n = 0; n<250; n++)
    for(int i= 0;i<5;i++){
    if(b[n] == vocali [i])
    contatore++;}
    return contatore;
    }
    
    
    int main()
    {      
    char stringa[25];
    cout<<"immetti stringa:";
    cout<<endl;
    leggi_nome_file(stringa);
    cout<<leggi(stringa);
    cout<<endl;
    system("pause");
    return 0;}
  • Hai imparato ad usare la classe string?
  • È guarda,non bene,magari se mi potessi dire gli errori mi rendo conto,grazie
  • 
    #include <iostream>
    
    using namespace std;
    void leggi_nome_file(char a[])
    {
    	cin.getline(a,24);
    }
    int leggi(char b[])
    {
    	int contatore = 0;
    	char vocali[5] = {'a','e','i','o','u'};
    	for(int n = 0; n<25; n++)
    	{
    		for(int i= 0;i<5;i++)
    		{
    			if(b[n] == vocali [i])
    				contatore++;
    		}
    	}
    	return contatore;
    }
    
    
    int main()
    {     
    	char stringa[25] = {0};
    
    	cout<<"immetti stringa:";
    	cout<<endl;
    
    	leggi_nome_file(stringa);
    
    	cout<<leggi(stringa);
    
    	cout<<endl;
    	system("pause");
    	return 0;
    }
    
    cin >> a non ti prende tutta la stringa se essa contiene dei spazi.devi usare cin.getline
  • Oh grazie,adesso va infatti,ma una domanda,se ad esempio non so quanto è lunga la stringa?come faccio?non posso scrivere stringa[25],come posso fare?e per il for?non potrei scrivere
    for(int n = 0; n<25; n++)
  • Per quello che ti dicevo di usare la classe string. vedi come diventa il tuo programma con la classe string.
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    void leggi_nome_file(string & a)
    {
    	getline(cin,a);
    }
    int leggi(const string & b)
    {
    	int contatore = 0;
    	int length = b.length();
    	char vocali[5] = {'a','e','i','o','u'};
    	for(int n = 0; n<length; n++)
    	{
    		for(int i= 0;i<5;i++)
    		{
    			if(b[n] == vocali [i])
    				contatore++;
    		}
    	}
    	return contatore;
    }
    
    
    int main()
    {     
    	string stringa;
    
    	cout<<"immetti stringa:";
    	cout<<endl;
    
    	leggi_nome_file(stringa);
    
    	cout<<leggi(stringa);
    
    	cout<<endl;
    	system("pause");
    	return 0;
    }
    
    Non devi specificare quanto è lungo l'array non devi mettere numeri e sai sempre la lunghezza della stringa con la funzione length().
  • Ah capito,poi lo studierò bene,riparlando delle vocali però,io ho messo solo quelle in minuscolo,e se ce c'è una maiuscola o una accentata?non la riconosce?
  • No. Dovresti allargare l'array per comprendere anche quelle. Se vuoi includere anche le maiuscole dovresti usare la funzione tolower per trasformare la stringa tutta in minuscola prima di fare il confronto.
  • Ah capito e ci metto pure le maiuscole?quindi diventa di 15 elementi
  • Vedi tu non ho fatto i conti.
  • C'è un problema:(,non mi riconosce le accentate:(,perchè?ti scrivo il programma:
    #include <iostream>
      using namespace std;
      
    void leggi_nome_file(char a[])
    {
       cin.getline(a,24);
    }
    int leggi(char b[])
    {
       int contatore = 0;
       char vocali[15] = {'a','e','i','o','u','ì','ò','à','ù','è','A','E','I','O','U'};
       for(int n = 0; n<25; n++)
       {
          for(int i= 0;i<15;i++)
          {
             if(b[n] == vocali [i])
                contatore++;
          }
       }
       return contatore;
    }
    
    
    int main()
    {     
       char stringa[25] = {0};
    
       cout<<"immetti stringa:";
       cout<<endl;
    
       leggi_nome_file(stringa);
    
       cout<<leggi(stringa);
    
       cout<<endl;
       system("pause");
       return 0;
    }
  • Perche sono UNICODE. Quì andiamo sul dificile quindi ti dico di lasciare stare x il momento.
  • Ah capito,grazie mille!!!!!!!
Devi accedere o registrarti per scrivere nel forum
14 risposte