Odwracanie kolejności znaków w tablicy - zadanie na wskaźnikach.

0

Witam,
mam problem z napisaniem funkcji, która tak jak wspomniałem w temacie wyświetla tablicę znaków w odwróconej kolejności. Dokładne polecenie brzmi:
Napisz funkcję, która odwraca kolejność znaków w tablicy s, której parametrem jest char * s i której rezultatem jest wskazanie na tablicę s. Pamiętaj, aby do zrobienia funkcji nie używać operacji indeksowych.
O ile dobrze rozumiem, jeśli mam ciąg znaków "ABCD" to wynikiem działania funkcji powinno być "DCBA".

Sam "schemat" również został odgórnie podany i wygląda tak:

char * str_rev(char * s)
{
  // ??
}

Problem w tym, że nie mam pojęcia jak.
W jednej z poprzednich funkcji, którą miałem napisać w podobny sposób użyłem takiej pętli for :

for(; *s != '\0'; ++s)

i również w tym przypadku myślałem, aby ją jakoś wykorzystać, ale niestety nie przychodzi mi do głowy żaden pomysł co do sposobu w jaki miałbym to zrobić.

Czy mógłby ktoś mi podpowiedzieć w jaki sposób to zrobić / nakierować na odpowiednie rozwiązanie? Będę bardzo wdzięczny za wszelkie odpowiedzi.

4

Przechodzisz jednocześniej od przodu i od tyłu i zamieniasz po kolei wartości.

int end = strlen(s) - 1;
for( int beg = 0; beg < end; ++beg,--end )
{
}

W ciele pętli wykonujesz zamianę s[beg] i s[end]

EDIT z komentarzy

W poleceniu jest napisane, aby nie stosować operacji indeksowych

s[beg] i s[end] możesz zapisać bez [] korzystając z arytmetyki wskaźników, pętla bez zmian.

2
#include <algorithm>
#include <cstring>
using namespace std;
 
char *str_rev(char *s)
{
    reverse(s,s+strlen(s));
    return s;
}
1

@several: Trochę pokombinowałem według podpowiedzi i działa jak należy. Bardzo dziękuję za pomoc.

1

A teraz można zrobić plot-twist i dodać obsługę unicode. Już tak łatwo nie będzie, jeśli będziesz miał znaki o różnej długości w bajtach.

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