Преобразование рекурсивного кода для преобразования строки в итеративную в c ++ - PullRequest
0 голосов
/ 17 декабря 2018

example ... I want the iterative  code to work this way not the ordinary way это мой код, включающий рекурсивный код, и я хочу преобразовать его в итеративный, но я хочу, чтобы он полностью изменил строку, как это делает рекурсия ... возможно ли этоЯ имею в виду, разделив его

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

string reverse (string temp, int length)
{
    if (length == 1)
    {
        return temp;
    }
    else
    {
        int t = (temp.length() + 1) / 2;
        return
            reverse(
                temp.substr(t, temp.length() - 1),
                t
            ) +
            reverse(
                temp.substr(0, t),
                t
            );
    }
}

int main() {
    string s;
    cin>>s;
    string rev = reverse(s, s.length());
    cout <<"\n"<<rev;
    cin>>s;

    return 0;
}

1 Ответ

0 голосов
/ 18 декабря 2018

Версия non-recursive кода для обращения string может быть сделана путем замены каждой i позиции до половины на len - i - 1, как показано ниже:

#include <iostream>
#include <string.h>
using namespace std;
int main() {
    string s;
    cin>>s;
    // Itearative code for reversing string s
    int len = s.size();
    int leftIdx = 0, rightIdx = len - 1;
    while (leftIdx < rightIdx) {
        swap(s[leftIdx], s[rightIdx]); // swapping index (i) with (len - i - 1)
        leftIdx++, rightIdx--;
    }
    cout<<s<<endl;
    return 0;
}
...