Посмотрите, что делается в цикле:
temp = *end;
*end = *begin;
*begin = temp;
Это типичный код подкачки, который здесь меняет два символа *begin
и *end
строки. Указатели перебирают начало и конец строки и приближаются к середине.
Используя минимальный пример abcd
, давайте посмотрим, сколько символов нам нужно поменять местами:
abcd (Original string)
dbca (Swapped 'a' and 'd') - iteration 1
dcba (Swapped 'b' and 'c') - finished after 2 iterations
Таким образом, вам нужно поменять местами только половину символов (length / 2
итераций), поскольку вы меняете два из них при каждой операции. Это также объясняет, почему вы получаете исходную строку при изменении на length - 1
итераций:
dcba (result from above after 2 iterations)
dbca (Swapped 'c' and 'b') - iteration 3
abcd (Swapped 'd' and 'a') - original string after 4 iterations