Устранение вашей ошибки
Проблема с вашим циклом заключается в том, что при попытке поменять местами символы вы меняете местами уже поменявшиеся символы.
I 'Я попытаюсь объяснить, показывая, что происходит в каждой итерации.Вы можете увидеть начальное содержимое cadena
и окончательное (res
) после каждого обмена в каждой итерации.|
- это то место, где указатели aux
и end
в данный момент указывают:
len = 5
aux |
h e l l o
end |
res: o e l l o
len = 4
aux |
h e l l o
end |
res: o l l l o
len = 3
aux |
h e l l o
end |
res: o l l l o
len = 2
aux |
h e l l o
end |
res: o l l l o
len = 1
aux |
h e l l o
end |
res: o l l l o
len = 0
=> break the loop
На решение ..
Мое место reverse
будет этот :
void reverse(char *str)
{
if (!str || !(*str)) return;
char *end = str + strlen(str) - 1;
while (str < end) {
char tmp = *str;
*str++ = *end;
*end-- = tmp;
}
}
Некоторые ключевые моменты:
- обратите внимание на использование
strlen
для поиска последнего символа строки - Вы должны выполнять итерации, пока не встретятся начальный и конечный указатели.В противном случае вы перевернете строку