Odwrócenie zadanego ciągu znaków. Drobny problem.

0

Cześć, od razu zaznaczam ze jestem nowicjuszem. Dostałem klasyczne zadanie: napisać program który odwróci kolejność znaków dowolnego wyrazu (który użytkownik sam zdefiniuje). Sam program jako takim problemem nie jest, tylko efekt jego działania, mianowicie: pierwszy znak (który ma byc ostatnim w wyniku działania programu) jest jakimś krzakiem.
Np: wpisuję słowo: "pies". Wynikiem powinno być "seip", a wychodzi " seiř". Dodam że ta smieszna literka ř pojawia sie niezaleznie od tego jaka jest pierwsza litera słowa. Jakieś sugestie co jest nie tak? Załączam kod:

#include "stdafx.h"
#include <conio.h>
#include <string>
#include <iostream>
using namespace std;
int main()
{
	string tab1;
	getline(cin, tab1);
	int z=0;
	int r=tab1.length();
	int c=tab1.length();
	char *tab2;
	tab2 = new char [c];
	do
	{
		char znak;
		znak=tab1[r];
		tab2[z]=znak;
		r--;
		z++;
	}while(r != 0);
	for(int i=0;i<=c;i++)
	cout<<tab2[i];  
	cin.ignore();
	cin.get();
	delete[] tab2;
}
 

edycja: Problem rozwiązany. Warunek while(r!=0) zmienilem na while(r>=0)

0

Brak znaku \0 na końcu ciągu znaków. Wypisywanie do i<=c zamiast i<c, a w ogóle to możesz dodać ten znak \0 i wypisać po prostu jak stringa.
Poza tym stringi tak jak i tablice SĄ INDEKSOWANE OD 0 DO N-1 a ty sobie wyciągasz dane od N, więc siłą rzeczy kopiujesz jeden znak "z d**y".

0

Ja osobiście to zadanie zrobiłbym w taki sposób:

#include <iostream>

using namespace std;

int main()
{
    string a; 
    cin >> a; // lub getline
    string temp;
    
    for(int i = a.length()-1; i>=0; i--)
        temp += a[i];
        
    cout << temp << endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}
0

Jeżeli nie ma doprecyzowanego punktu o napisaniu funkcji "ręcznie" odwracającej string - to są std::reverse(), std::reverse_copy(), albo konstruktor: string temp(a.rbegin(), a.rend());

0
#include <iostream>

int main(int argc, char** argv) {

    std::string input;
    std::cin >> input;
    std::copy(input.rbegin(), input.rend(), std::ostreambuf_iterator<char>(std::cout));
    return 0;
}

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