Terminazione ciclo for con array e contatori.

di il
8 risposte

Terminazione ciclo for con array e contatori.

Ecco un'altra delle mie domande:
Si scriva una funzione c++ che riceva in ingresso una stringa di caratteri s e un array a di numeri interi. L'array a continene 5 elementi. La funzione dovrà calcolare il numero di occorrenze di ciascuna delle 5 vocali nella stringa s e assegnare tale valore all'elemento corrispondente dell'array a. il primo elemento di a conterrà quindi il numero di occorrenze in s del carattere 'a', il secondo elemento di a conterrà il numero di occorrenze in s del carattere 'e' e cosi via. La funzione restituirà come valore di ritorno il numero totale di vocali presenti nella stringa s.
--In poche parole, inserisco "Buongiorno a tutti" , dovrebbe darmi come risultato "8", ovvero le vocali nella frase.
Il problema sta nel ciclo for che inserisco nella funzione, come risultato mi da sempre il numero delle vocali presenti solo nella prima parola della frase..
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;

void vocali( char s[256]){
	
	int a[5];
	int va= 0;
	int ve= 0;
	int vi=0;
	int vo=0;
	int vu=0;
	
	for (int i=0; s[i]!= '\0';i++){
		
		if (s[i]=='a'){
			va = va+1;
		//	a[0] = va;
		
		}
		else if (s[i]== 'e'){
			ve= ve+1;
		//	a[1] = ve;
			
		}
	    else if (s[i]== 'i'){
	    	vi = vi +1;
		//	a[2] = vi;
			
		}
     	else if (s[i]== 'o'){
     		vo= vo+1;
		//	a[3] = vo;
			
		}
		else if (s[i]== 'u'){
			vu = vu +1;
		//	a[4] = vu;
			
		}
		
	
	}
	cout << "Ecco il numero delle vocali nella frase: " << vu+va+vi+vo+ve;
}

int main (){
	
	char s[256];
	int a[5];
	
	cout << "Inserire frase: ";
	cin >> s;
	vocali(s);
	cout << endl << s;
	
	return 0;
	
}

8 Risposte

  • Re: Terminazione ciclo for con array e contatori.

    Veramente, se non sbaglio, il risultato per
    "Buongiorno a tutti"
    dovrebbe essere
    a[0]=1;
    a[1]=0;
    a[2]=2;
    a[3]=3;
    a[4]=2;
    Ad ogni modo, per risolvere il problema, ti consiglio di stampare all'entrata nella funzione il contenuto della stringa e all'interno del for il valore di s .
  • Re: Terminazione ciclo for con array e contatori.

    Metti uno switch al posto di quegli if in cascata e anziché fare a[0] = va, semplicemente incrementi il valore di a[0].
  • Re: Terminazione ciclo for con array e contatori.

    A[0] += 1; ?

    Comunque il problema e' che non mi da il risultato giusto..
  • Re: Terminazione ciclo for con array e contatori.

    Ripeto: inserisci delle stampe a video della stringa in input e del valore del carattere s all'interno del for
  • Re: Terminazione ciclo for con array e contatori.

        #include <stdio.h>
        #include <iostream>
        #include <cstring>
        using namespace std;
    
        void vocali( char s[256]){
           cout << s;
           int a[5];
           int va= 0;
           int ve= 0;
           int vi=0;
           int vo=0;
           int vu=0;
           
           for (int i=0; s[i]!= '\0';i++){
              
              if (s[i]=='a'){
                 va = va+1;
              //   a[0] = va;
              
              }
              else if (s[i]== 'e'){
                 ve= ve+1;
              //   a[1] = ve;
                 
              }
               else if (s[i]== 'i'){
                  vi = vi +1;
              //   a[2] = vi;
                 
              }
                else if (s[i]== 'o'){
                   vo= vo+1;
              //   a[3] = vo;
                 
              }
              else if (s[i]== 'u'){
                 vu = vu +1;
              //   a[4] = vu;
                 
              }
              
           
           }
           cout << "Ecco il numero delle vocali nella frase: " << vu+va+vi+vo+ve;
        }
    
        int main (){
           
           char s[256];
           int a[5];
           
           cout << "Inserire frase: ";
           cin >> s;
           vocali(s);
           cout << endl << s;
           
           return 0;
           
        }
    Con il valore di scome faccio?
  • Re: Terminazione ciclo for con array e contatori.

    Se utilizzi

    cin >> s;

    memorizzerai solo la prima parola. Devi usare

    cin.getline(s, 256);
  • Re: Terminazione ciclo for con array e contatori.

    Ora funziona perfettamente, hai ragione..Grazie a tutti ragazzi!!
  • Re: Terminazione ciclo for con array e contatori.

    DavSen3 ha scritto:


    a[0] += 1; ?

    Comunque il problema e' che non mi da il risultato giusto..
    prego, comunque questo può essere abbreviato con ++a[0] (o a[0]++)
Devi accedere o registrarti per scrivere nel forum
8 risposte