Skip to content

Instantly share code, notes, and snippets.

@ProfAndreaPollini
Created November 26, 2024 11:48
Show Gist options
  • Save ProfAndreaPollini/a6a817951b33472f5bdb310429c809d8 to your computer and use it in GitHub Desktop.
Save ProfAndreaPollini/a6a817951b33472f5bdb310429c809d8 to your computer and use it in GitHub Desktop.
esercizio c++ vettori di stringhe (std::vector std::string)

Analisi del codice

Inclusione delle librerie

#include <iostream>
#include <string>
#include <vector>
  • iostream: Fornisce le funzionalità di input/output di base, come cin e cout.
  • string: Definisce la classe string per manipolare sequenze di caratteri.
  • vector: Definisce il template vector per gestire contenitori dinamici di elementi.

Funzione principale

int main() {
  • int main(): Punto di ingresso del programma.

Dichiarazione delle variabili

    std::string a;
    int somma = 0;
    std::vector<std::string> valori;
  • std::string a: Variabile di tipo stringa utilizzata per memorizzare temporaneamente l'input dell'utente.
  • int somma: Variabile intera inizializzata a 0 per accumulare la somma delle lunghezze delle stringhe.
  • std::vectorstd::string valori: Vettore di stringhe utilizzato per memorizzare tutte le stringhe inserite dall'utente.

Ciclo do-while

    do {
        std::cout << "Inserisci una stringa: ";
        std::getline(std::cin,a);
        valori.push_back(a);
    } while (a != "exit");
  • do: Inizia il ciclo.
    • std::cout << "Inserisci una stringa: ";: Stampa un prompt per chiedere all'utente di inserire una stringa.
    • std::getline(std::cin,a);: Legge una riga completa da cin (input standard) e la memorizza nella variabile a.
    • valori.push_back(a);: Aggiunge la stringa appena letta alla fine del vettore valori.
  • while (a != "exit");: Continua il ciclo finché la stringa inserita non è uguale a "exit".

Ciclo for

    for (int i = 0; i < valori.size() - 1; i++) {
        std::cout << valori[i] << " " << valori[i].length() << std::endl;
        somma = somma + valori[i].length();
    }
  • for (int i = 0; i < valori.size() - 1; i++): Iterazione su tutti gli elementi del vettore valori (escluso l'ultimo, che è "exit").
    • std::cout << valori[i] << " " << valori[i].length() << std::endl;: Stampa la stringa corrente e la sua lunghezza.
    • somma = somma + valori[i].length();: Aggiunge la lunghezza della stringa corrente alla variabile somma.

Calcolo e stampa della media

std::cout << static_cast<float>(somma)/(valori.size() - 1) << std::endl;
  • static_cast(somma): Converte il valore intero di somma in un valore a virgola mobile (float) per ottenere una divisione con precisione floating-point.
  • (valori.size() - 1): Calcola il numero di stringhe valide (escludendo "exit").
  • std::cout << ... << std::endl;: Stampa la media delle lunghezze delle stringhe.

Ritorno

    return 0;
}
  • return 0: Indica che il programma è terminato correttamente.

In sintesi: Il codice legge una serie di stringhe inserite dall'utente fino a quando non viene inserita la parola "exit". Quindi, calcola la lunghezza media di tutte le stringhe inserite (esclusa "exit") e stampa il risultato.

Note:

  • Il ciclo for itera fino a valori.size() - 1 per evitare di includere la stringa "exit" nel calcolo della media.
  • Il static_cast è necessario per eseguire una divisione in virgola mobile e ottenere un risultato preciso.
  • Il vettore valori viene utilizzato per memorizzare tutte le stringhe inserite, anche se solo le lunghezze vengono utilizzate per il calcolo della media.

Possibili miglioramenti:

  • Validazione dell'input: Si potrebbe aggiungere una verifica per assicurarsi che l'utente inserisca effettivamente delle stringhe e non solo spazi vuoti.
  • Gestione di errori: Si potrebbe gestire l'eventualità che l'utente non inserisca alcuna stringa prima di scrivere "exit".
  • Funzionalità aggiuntive: Si potrebbero aggiungere altre funzionalità, come il calcolo della lunghezza massima e minima delle stringhe, o la ricerca di determinate parole all'interno delle stringhe.
// date in input un numero arbitrario di stringhe
// che termineranno quando l'utente inserisce la
// stringa "exit", stampare a video la lunghezza media
// delle stringhe inserite, esclusa "exit"
#include <iostream>
#include <string>
#include <vector>
int main() {
std::string a;
int somma = 0;
std::vector<std::string> valori;
do {
std::cout << "Inserisci una stringa: ";
std::getline(std::cin,a);
valori.push_back(a);
} while (a != "exit");
for (int i = 0; i < valori.size() - 1; i++) {
std::cout << valori[i] << " " << valori[i].length() << std::endl;
somma = somma + valori[i].length();
}
std::cout << static_cast<float>(somma)/(valori.size() - 1) << std::endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment