Почему функция не возвращает строку? - PullRequest
0 голосов
/ 26 марта 2020
#include<iostream>
#include<string.h>
using namespace std;

string revString(string s,string copy,int i,int j)
{   
    if(i==s.length())
        return copy;//if 'i' reaches to the length of the string it returns the copied value
    else{
        copy[i]=s[j];//copying the string s into copy
        return revString(s,copy,++i,--j);// calling recursively 
    }
}

int main()
{
    string s,copy;
    cout<<"Enter a string without entering spaces\n";   
    cin>>s;
    int i=0,j=s.length()-1;
    cout<<revString(s,copy,i,j);//function for reversing the string
    return 0;
}

здесь я пытаюсь скопировать строку 's' в строку 'copy' с помощью рекурсии, но функция ничего не возвращает.

1 Ответ

0 голосов
/ 26 марта 2020

ваш подход был хорош, но представьте, что у вас есть 100 символов, тогда он будет повторяться 100 раз. вместо того, что вы можете сделать, переверните первую половину со второй половиной строки, и вам даже не нужно передавать слишком много аргументов.

это мой подход

#include<iostream>
#include<string.h>
using namespace std;

string revString(string s, int i = 0)
{
    if((int)(s.length()  / 2) == i)
        return s;
    else{
        char t;
        t = s[i];
        s[i] = s[s.length() - 1 - i];
        s[s.length() - 1 - i]=t;
        return revString(s, ++i);// calling recursively 
    }
}

int main()
{
    string s;
    cout<<"Enter a string without entering spaces\n";   
    cin>>s;;
    cout<<revString(s);//function for reversing the string
    return 0;
}

...