Stringhe, conta tre consonanti

di Anonimizzato27045 il
11 risposte
Praticamente quando avvio il programma parte la funziona ma mi da che qualsiasi frase ha almeno tre consonanti
#include <iostream>
#include <string>
using namespace std;

void contaConsonanti(const string &s1)
{
	int conta_consonanti=0;
	
while(conta_consonanti<3)
{	
	for(int x=0; x<s1.size(); x++)
	{
	    char stringa = s1[x];
	    if(stringa=='B' || stringa=='b')
	    {
	    	conta_consonanti++;
		}
		else if(stringa=='C' || stringa=='c')
		{
			conta_consonanti++;
		}
		else if(stringa=='D' || stringa=='d')
		{
			conta_consonanti++;
		}
		else if(stringa=='F' || stringa=='f')
		{
			conta_consonanti++;
		}
		else if(stringa=='H' || stringa=='h')
		{
			conta_consonanti++;
		}
		else if(stringa=='L' || stringa=='l')
		{
			conta_consonanti++;
		}
		else if(stringa=='M' || stringa=='m')
		{
			conta_consonanti++;
		}
		else if(stringa=='G' || stringa=='g')
		{
			conta_consonanti++;
		}
		else if(stringa=='N' || stringa=='n')
		{
			conta_consonanti++;
		}
		else if(stringa=='P' || stringa=='p')
		{
			conta_consonanti++;
		}
		else if(stringa=='Q' || stringa=='q')
		{
			conta_consonanti++;
		}
		else if(stringa=='R' || stringa=='r')
		{
			conta_consonanti++;
		}
		else if(stringa=='S' || stringa=='s')
		{
			conta_consonanti++;
		}
		else if(stringa=='T' || stringa=='t')
		{
			conta_consonanti++;
		}
		else if(stringa=='V' || stringa=='v')
		{
			conta_consonanti++;
		}
		else if(stringa=='Z' || stringa=='z')
		{
			conta_consonanti++;
		}
	}   
}
	
	if(conta_consonanti>=3)
	{
		cout<<"Ci sono tre consonanti consecutive nella frase."<<'\n';
	}
	else
	{
		cout<<"Non ci sono tre consonanti consecutive nella frase."<<'\n';
	}
}
    
  


int main()
{
	string s1 = "botte";
	cout<<s1<<'\n';
	contaConsonanti(s1);

}

11 Risposte

  • Almeno fai la logica inversa sulle vocali... ma che voglia hai di complicarti la vita
  • Comunque hai invertito for e while, quindi non puoi uscire dal while se le consonanti sono meno di 3
  • Noccapito, in che senso ho invertito while e for
  • Togli direttamente il while che non serve a una mazza
  • Dopo però mi conta tutte le consonanti e non tre consecutive il problema e trovarne 3 consecutive
  • DOVE hai scritto fino ad ora che dovevano essere CONSECUTIVE?
  • Infatti, non l'hai scritto!

    E comunque il while non ti serve lo stesso. Ti serve una variabile booleana che va a true quando conta_consonanti supera 2 dentro il for. Sempre dentro il for devi azzerare la stessa variabile conta_consonanti se il carattere non è una consonante
  • Proviamo
    
    /*
     * (C)2019  IProgrammatori.it
     *
     * Il compito piu bello sara' quello che farai da solo.
     *
     * L'amore per il C/C++ non e' nel compito di scuola.
     *
     * In Linux:     g++ main.cc -o consonanti
     */
    
    #include <iostream>
    
    using namespace std;
    
    const char consonanti[] = "bcdfghjklmnpqrtsvwxyz";
    
    static char minor(char c)
    {
            if (c >= 65 && c <= 90)
                    return c + 32;
    
            return c;
    }
    
    int main(int argc, char **argv)
    {
            if (argc != 2) {
                    cout << "usage: consonanti \"frase\"\n";
                    return -1;
            }
    
            string frase(argv[1]);
            int i, q, count = 0;
    
            for (i = 0; i < frase.size(); ++i) {
                    for (q = 0; q < sizeof(consonanti); ++q) {
                            if (minor(frase[i]) == consonanti[q])
                                    count++;
                    }
            }
    
            cout << "ci sono " << count << " consonanti\n";
    
            return 0;
    }
    
    
  • @spectrum .... dare a tutti la pappa pronta non aiuta chi sta imparando ... a prescindere dal regolamento del forum...
  • @oregon

    proporre una soluzione alternativa non implica che la devi copiare. Piuttosto, la puoi osservare e fare delle domande. Con le conoscenze acquisite puoi fare un lavoro migliore.

    Ho postato qui in questo forum alcune cose in questi giorni. Vedo che non vengono gradite. Non mi vedrete piu. Saluti.
  • spectrum ha scritto:


    @oregon

    proporre una soluzione alternativa non implica che la devi copiare.
    Dare consigli sul modo alternativo di affrontare i problemi ha un senso. Dare tutto il codice pronto ti assicuro che, per gli studenti, non è formativo (a parte essere vietato dal regolamento...).
    Loro copiano il codice fornito come pappa pronta
    (escluso il (C) copyright ovviamente.. )
Devi accedere o registrarti per scrivere nel forum
11 risposte