feature image - https://source.unsplash.com/random/900×600/?wallpaper&sig=f4fa0117

Inversione parole in una stringa

Esercizio

Data in input una stringa (letta con la funzione std::getline()) contenente una serie di parole separate da uno spazio, scrivere una funzione che restituisca una stringa contenente la stessa serie di parole ma con le parole in ordine inverso.

Soluzione

Per la soluzione utilizziamo un vettore di stringhe e andiamo ad inserire le varie parole all’inizio del vettore, in modo tale da averle poi giá in ordine inverso.

#include <iostream>
#include <string>
#include <vector>

std::string inverti_parole(const std::string&);

int main() {
std::string s;

std::cout << "s = ";
//std::cin >> s;
std::getline(std::cin,s);
auto stringa_invertita = inverti_parole(s);
//s = inverti_parole(s);
std::cout << stringa_invertita << "\n";

std::cout << "\nbye.\n";
}

std::vector<std::string> get_parole(const std::string& str) {
std::vector<std::string> p;
std::string parola;
for(auto i = 0; i < str.size(); i++) {
if(str[i] == ' ' ) {
//p.push_back(parola); // aggiungo la parola al vettore;
p.insert(p.begin(),parola);
parola.clear();
} else {
parola.push_back(str[i]);
}
}
p.insert(p.begin(),parola);
return p;
}

std::string inverti_parole(const std::string& str){
std::vector<std::string> parole = get_parole(str);

for(auto parola:parole) {
std::cout << parola << "\n";
}

std::string out;
for(auto i = 0; i< parole.size(); i++) {
out += parole[i];
if (i != parole.size() -1) {
out += " ";
}
}

// spezzare la stringa
return out;
}

Andrea Pollini

Matematico, informatico.