Я попробовал свой код после поиска некоторых решений в Интернете. Был один алгоритм обращения строки с помощью рекурсии, и я изо всех сил старался сделать свой код в соответствии с этим алгоритмом. к сожалению, мой код меняет местами только первый и последний символы в данной строке, но не символы, вторые вторыми последними, и так далее. любая помощь будет оценена здесь, мой код:
string reverse(string s,int length,int start=0){
if (start>=length){
return s;
}
else{
char temp=s[length];
s[length]=s[start];
s[start]=temp;
reverse(s,--length,++start);
}return s;
}
int main(void) {
string a;cout<<"enter a string:";getline(cin,a);
cout<<reverse(a,a.length()-1,0);
}
2 ответа
Вам необходимо передать строку по ссылке, а не по значению в функции reverse
:
string reverse(string& s,int length,int start=0){
Живой пример: http://ideone.com/pJ3G9l
Причина, по которой ссылка работает, заключается в том, что вы меняете текущую строку, а не временную строку.
Как предполагалось в комментарии, если желаемый эффект состоит в том, чтобы не изменять исходную строку, тогда будет работать вспомогательная функция, выполняющая рекурсию.
string reverse_helper(string& s,int length,int start)
{
if (start>=length)
return s;
else
{
char temp=s[length];
s[length]=s[start];
s[start]=temp;
reverse_helper(s,--length,++start);
}
return s;
}
string reverse(string str, int length, int start=0)
{
return reverse_helper(str, length, start);
}
Живой пример вспомогательной функции: http://ideone.com/RzY1Bu
Вместо возврата s
, который является копией исходной строки с переключенными первым и последним символами, вам нужно вернуть следующий вызов reverse()
:
else{
//...
return reverse( s, --length, ++start );
}
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .