Brak wyświetlania zawartości zmiennej typu string po odwróceniu znaków

0

Dzień dobry.
Stworzyłem kod, który ma odwracać napis zawarty w zmiennej wyraz i wpisać go do zmiennej o nazwie wspak. Obie zmienne są typu string.
I odwracanie wykonałem prawidłowo. Tylko nie chce mi wyświetlać zawartości zmiennej wspak, gdy wpisuję cout<<"\r"<<wspak; (nic nie wyświetla).
Gdy wcześniej wpisałem cout<<endl<<wspak[0]<<wspak[1]<<wspak[2]<<wspak[3]; to poszczególne litery znajdują się w zmiennej wspak, ponieważ
ten zapis wyświetla odwrócone znaki. To czemu nie działa cout<<"\r"<<wspak; ?

W jeszcze jedno. wewnątrz pętli odwracającej napis mam napisane cout<<dlugosc<<" "<<licznik<<" "<<wspak<<" "<<endl;, w wyniku czego wyświetlana jest zawartość zmiennych dlugosc i licznik, ale bez zawartości zmiennej wspak (co widać na zamieszczonym na końcu wyniku działania programu; powinna się wyświetlić 5 razy, a nie ma ani razu). Dlaczego się nie wyświetla zawartość zmiennej wspak?

Kod:

 #include <iostream>
#include <string>

using namespace std;

int main ()
{

//deklaracje zmiennych
string wyraz;
int dlugosc=0;
string wspak;


wyraz="woda";                        // wyraz do odwrócenia
dlugosc=wyraz.length();          // pobranie ilosci znaków stringu wyraz



cout<<"Długośc wyrazu: "<<dlugosc<<endl;           // wypisanie długości wyrazu
for (int licznik=dlugosc; licznik>-1; --licznik)           // pętla odwracająca
{

	wspak[dlugosc-licznik]=wyraz[licznik-1];
	cout<<dlugosc<<"  "<<licznik<<"  "<<wspak<<"   "<<endl;   // w celu sparawdzenia wyświetla zawartości 
                                                        //zmiennych dlugosc, licznik i wspak  ************* drugi problem
}

cout<<endl<<wspak[0]<<wspak[1]<<wspak[2]<<wspak[3];    // wypisanie "na siłę" elementów zmiennej wspak

cout<<"\r"<<wspak;      // wypisanie całej zawartości zmiennej wspak  **************** i to nie działa   (pierwszy problem)


	return 0;
}

Wynik działania:

Długośc wyrazu: 4
4  4     
4  3     
4  2     
4  1     
4  0     

adow
 
0

A nie lepiej:

#include <iostream>
int main(){
    std::string src="Grzesiek";
    std::string dst;
    for(int i=src.length()-1;i>=0;i--)
        dst.push_back(src[i]);
    std::cout << dst << std::endl;
    return 0;
}

2

string wspak; - std::string o długości 0.

wspak[dlugosc-licznik] - odwołanie do elementu, który nie istnieje. wspak jest przecież pusty, nie ma żadnego indeksu, którego mógłbyś użyć.

Żeby to zrobić tak jak próbujesz należy najpierw spowodować, żeby wspak coś zawierało. Żeby zrobić to jak należy użyj std::reverse, albo tak jak @_13th_Dragon poniżej.

1
#include <string>
#include <iostream>

int main()
  {
   std::string src="Grzesiek";
   std::string dst(src.rbegin(),src.rend());
   std::cout<<dst<<std::endl;
   return 0;
  }

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