C++. Invertire le lettere di una parola

di il
2 risposte

C++. Invertire le lettere di una parola

Buongiorno. Volevo fare un programma per invertire l'ordine delle lettere di una parola (es: "Informatica" diventa "acitamrofnI") che ho
trovato su internet. Il compilatore mi dà 0 errori ma dopo l'eseguibile mi dice: "terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::at: __n (which is 0) >= this->size() (which is 0).This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.". Questo è il codice:

#include<iostream>
#include<string>
using namespace std;

void inverti_parola (string parola1){
	string parola2;
	int lunghezza = parola1.length();
	int k=0;
	while(k<lunghezza){
		parola2.at(k) = parola1.at(lunghezza-k);
		++k;
	}
	std::cout << parola2;
}

int main(){
	string par;
	std::cout << "Dimmi la parola che vuoi invertire: ";
	std::cin >> par;
	inverti_parola(par);
	return 0;
}

2 Risposte

  • Re: C++. Invertire le lettere di una parola

    .at() solleva un'eccezione in caso l'indice non sia valido.
    Nel tuo caso, parola2 ha lunghezza 0 pertanto il metodo .at() solleva l'eccezione.
    Risolvi in due modi: dimensioni parola2 a parola,
    
    string parola2(parola1.size(),'\0');
    // o equivalente
    string parola2;
    parola2.resize(parola1.size());
    
    oppure scrivi:
    
    parola2.append(1, parola1.at(lunghezza - k -1));
    
    (notare il -1 alla fine, dato che lunghezza non è un indice valido)
  • Re: C++. Invertire le lettere di una parola

    shodan ha scritto:


    .at() solleva un'eccezione in caso l'indice non sia valido.
    Nel tuo caso, parola2 ha lunghezza 0 pertanto il metodo .at() solleva l'eccezione.
    Risolvi in due modi: dimensioni parola2 a parola,
    
    string parola2(parola1.size(),'\0');
    // o equivalente
    string parola2;
    parola2.resize(parola1.size());
    
    oppure scrivi:
    
    parola2.append(1, parola1.at(lunghezza - k -1));
    
    (notare il -1 alla fine, dato che lunghezza non è un indice valido)
    Grazie! Funziona
Devi accedere o registrarti per scrivere nel forum
2 risposte