Odwracanie tekstu, problem z nową zmienną typu string

0

Witam, W momencie, gdy uruchamiam kod nie wyświetla zmiennej z odwróconym napisem, tak jakby program ją ignoruje. Kompletnie nie wiem na czym polega mój błąd. Proszę o pomoc :)

#include <iostream>
using namespace std;
int main(){
    string napis,odwrocony;
    cin>>napis;
    int dl=napis.size();
    for(int i=0;i<dl;i++){
        odwrocony[i]=napis[dl-i-1];
    }

    cout<<odwrocony;
    return 0;
}```
2

Nie alokujesz miejsca na napis odwrocony.

0

ok. Chodzi o taką deklaracje?:
string odwrocony[dl];

0

Przecież w ten sposób utworzysz tablicę stringów. Dlaczego zgadujesz?

0

Bo nie wiem

0

Ach - a ktoś Ci broni sprawdzić w internecie? ;-)

W Twoim przypadku jednak najlepiej będzie wykorzystać operator +=, zamiast zabawy w [] - to dodatkowo sprawi, że nie trzeba będzie kombinować z żadną alokacją.

0

dzięki, już ogarniam

0

Twój kod będzie działał poprawnie, jeśli zaalokujesz pamięć dla odwrocony (tak jak to @Patryk27 napisał), ale żeby to zrobić, to musisz znać rozmiar tej zmiennej (ile znaków), a ten poznajesz dopiero po wprowadzeniu cin>>napis;.
Aby twój kod zadziałał, możesz np. zmiennej odwrocony przypisać wartość napis, co spowoduje zaalokowanie pamięci (a przy okazji skopiowanie stringa).

#include <iostream>
#include <string>
using namespace std;
int main(){
    string napis;
    cout<<"Podaj napis:\n";
    cin>>napis;
    int dl=napis.size();
    string odwrocony = napis;
    for(int i=0;i<dl;i++){
        odwrocony[i]=napis[dl-i-1];
    }
    cout<<odwrocony;
}
2

Zamiast bawić się w pętle można użyć std::reverse albo reverse iteratorów:

std::string odwrocony(napis.rbegin(), napis.rend());
std::reverse(napis.begin(), napis.end()); // napis bedzie zmodyfikowany

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0