Sto facendo un esercizio in C++ Primer e in pratica sto usando un'istruzione switch per contare il numero di vocali in un testo che inserisco.Controllare se un char è un newline
Inserisco il testo utilizzando un ciclo while.
while(cin >> ch)
e procedere con i casi, a, e, i, o, u, incrementare una variabile intera per i rispettivi casi. Ora la prossima parte della domanda dice anche contare gli spazi, le schede e le nuove righe.
Ho provato a fare
case ' ':
e così via con '\ t' e '\ n'. Ma sembra che non calcoli questi casi. Ho anche provato a utilizzare un valore predefinito e utilizzare un'istruzione if in caso contrario
default:
if(ch == ' ')
++space;
ecc. Ma questo non vale neanche. Ho anche provato a inserire i valori interi di "", "\ t", "\ n". Cosa sto facendo di sbagliato qui? Inoltre, so che se uso isspace() posso contare il totale combinato, ma ho bisogno di calcolarli individualmente. Non sono sicuro del motivo per cui il test di uguaglianza non farà il lavoro.
C'è un modo più semplice di leggere negli spazi bianchi? A questo punto del libro la tecnica che hai citato non è stata trattata. Ci deve essere una soluzione più semplice. – Ares
@Comrade: potresti usare 'std :: getline (std :: cin, str)' dove 'str' è un' std :: string'. Dovrebbe leggere gli spazi, ma i newline devono essere contati separatamente dal numero di chiamate riuscite a 'std :: getline()' (sebbene possa produrre un risultato errato se l'ultima riga termina con una nuova riga). Puoi anche 'std :: istreambuf_iterator' per scorrere la sequenza di 'char's (che è probabilmente l'approccio più veloce) ma dubito che questo sia trattato nel libro. –
La parte che conta le vocali mi impone di contare sia le minuscole che le maiuscole usando un caso per i due. Quindi nell'istruzione switch ho effettivamente un interruttore (tolower (ch)). Se uso getline (cin, str) dove str è una stringa, esiste una funzione analoga a tolower() che posso usare per una stringa? – Ares