Problema esercizio C++

di il
7 risposte

Problema esercizio C++

Salve vorrei chiedervi aiuto riguardo tale esercizio:
In un vettore di 100 elementi è memorizzata una frase. Ogni lettera della frase è contenuta in un elemento del vettore.
Scrivi un programma che permetta di:
  • Memorizzare la frase nell'array;
  • Stampare la frase al contrario; (Es. "Il mio gatto" -> "ottag oim li")
  • Stampare il numero di parole memorizzate nell'array; (le parole sono separate dal carattere spazio)
  • Stampare quante volt compare ciascuna vocale e quale vocale compare con frequenza maggiore;
Di seguito la codifica:
#include <iostream>
using namespace std;

int main () {
	int n,a,e,o,u,y,f,l,voc_max,s;
	char vet[100],voc;
	f=0,a=0,e=0,y=0,o=0,u=0;
	
	for (int i=0;i<100;i++){
		system("cls");
		cout<<"Inserire il "<<f+1<<" carattere della frase. Dopo l'ultimo carattere inserire un asterisco."<<endl;
		cin>>vet[f];
		if (vet[f]=='*') {
			i=100;
		}
		if (vet[f]='\0') {
			s++;
		}
		f++;
	}
	s=s+1;
	l=0;	
	for (int m=0;m<f;m++) {
		if (vet[m]=='a'){
			a++;
			}
		if (vet[m]=='e'){
			e++;
			}
		if (vet[m]=='i'){
			y++;
			}
		if (vet[m]=='o'){
			o++;
			}
		if (vet[m]=='u'){
			u++;
			}
		}
	voc_max=0;
	if (a>voc_max) {
		voc_max=a;
		voc='A';
	}
	if (e>voc_max) {
		voc_max=e;
		voc='E';
	}
	if (y>voc_max) {
		voc_max=y;
		voc='I';
	}
	if (o>voc_max) {
		voc_max=o;
		voc='O';
	}
	if (u>voc_max) {
		voc_max=u;
		voc='U';
	}
	for (l=f;l>=0;l--) {
		cout<<vet[l];
		}
	cout<<"\nIl numero di parole presenti nella frase e' "<<s<<endl;
	cout<<"Il numero di volte in cui compare la vocale 'A' e' "<<a<<endl;
	cout<<"Il numero di volte in cui compare la vocale 'E' e' "<<e<<endl;
	cout<<"Il numero di volte in cui compare la vocale 'I' e' "<<y<<endl;
	cout<<"Il numero di volte in cui compare la vocale 'O' e' "<<o<<endl;
	cout<<"Il numero di volte in cui compare la vocale 'U' e' "<<u<<endl;
	cout<<"La vocale che appare con piu' frequenza e' la vocale '"<<voc<<"' che si ripete "<<voc_max<<" volte"<<endl;
	system ("pause");
	}
Gli unici miei problemi li riscontro nel 2° e 3° punto. Praticamente non riesco a scrivere la frase al contrario, o meglio, se ci riesco me la riscrive senza spazi e giustamente dopo non mi conta le parole presenti nella frase in base agli spazi. Sono ancora un novellino in c++ ma vorrei capire come risolvere questo problema. Spero qualcuno possa aiutarmi. Grazie in anticipo.

7 Risposte

  • Re: Problema esercizio C++

    Per scrivere al contrario semplicemente usa un ciclo for, il cui indice parte da 99 e decrementa fino ad arrivare a 0 (compreso).. così stampi tutti gli elementi del vettore, compresi gli spazi che vi sono.
  • Re: Problema esercizio C++

    tuixte ha scritto:


    Per scrivere al contrario semplicemente usa un ciclo for, il cui indice parte da 99 e decrementa fino ad arrivare a 0 (compreso).. così stampi tutti gli elementi del vettore, compresi gli spazi che vi sono.
    Se guardi nella codifica l'ho svolto esattamente così l'esercizio ma purtroppo gli spazi non me li conta proprio come caratteri, infatti quando vado a scrivere la frase, se essa è composta da 3 parole e 15 lettere non mi aggiunge i 2 spazi tra le 3 parole ma mi conta solamente 15 caratteri che sarebbero solo le lettere della frase.
  • Re: Problema esercizio C++

    Si perchè l'oggetto cin gli spazi non li legge proprio singolarmente.
    se gli inserisci il carattere spazio come fai tu il cin non lo legge, se invece leggi direttamente una stringa (array di char) gli spazi li legge
  • Re: Problema esercizio C++

    DeSa ha scritto:


    si perchè l'oggetto cin gli spazi non li legge proprio singolarmente.
    se gli inserisci il carattere spazio come fai tu il cin non lo legge, se invece leggi direttamente una stringa (array di char) gli spazi li legge
    Io nella prova del programma ho inserito "La mela è rossa*" e mi è uscito in output "*assorèalemal" quindi non penso che abbia letto gli spazi altrimenti li avrebbe riscritti.
  • Re: Problema esercizio C++

    Ma perché inserisci un carattere per volta?

    Usa la getline e inserisci tutta la frase che vuoi in una string
  • Re: Problema esercizio C++

    oregon ha scritto:


    Ma perché inserisci un carattere per volta?

    Usa la getline e inserisci tutta la frase che vuoi in una string
    Ossia? Non capisco. Sono ancora un novellino in C++ se puoi spiega per favore.
  • Re: Problema esercizio C++

    Giangy ha scritto:


    DeSa ha scritto:


    si perchè l'oggetto cin gli spazi non li legge proprio singolarmente.
    se gli inserisci il carattere spazio come fai tu il cin non lo legge, se invece leggi direttamente una stringa (array di char) gli spazi li legge
    Io nella prova del programma ho inserito "La mela è rossa*" e mi è uscito in output "*assorèalemal" quindi non penso che abbia letto gli spazi altrimenti li avrebbe riscritti.
    si infatti tu credi di aver inserito gli spazi, ma lui non li memorizza nelle variabili.

    invece di controllare la fine della frase con l'asterisco metti direttamente:
    cout<<"scrivi la frase: ";
    cin>>vett;

    e solo dopo fai il for per controllare singolarmente carattere per carattere dalla cella 0 alla lunghezza-1:
    cioè fai for(int i=0; i<strlen(vett); i++) // test di ogni carattere
Devi accedere o registrarti per scrivere nel forum
7 risposte