2014-10-15 3 views
0

Я пытаюсь вернуть обратную версию строки "Loyce" в итеративной функции. Программа запускается, но после запуска она сработает. Любая помощь будет оценена по достоинству.C++ Ошибка при попытке итеративной строки возврата

string Iterative4(string word) 
{ 
    for(int x = 0; x < word.length(); x++) 
    { 
     if (word.length() - 1 > 0) 
     { 
      char last_char = word[word.length() - 1]; 
      word.erase(word.length() - 1); 
      string go = Iterative4(word); 
      return go; 
     } 
    } 

} 

int main() { 
    cout << Iterative4("Loyce") << endl; 
} 
+0

Знаете ли вы, что: 'std :: reverse'? –

+2

Ваш Iterative4 кажется итеративным * и * рекурсивным. Я предполагаю, что это не то, чего вы хотите. –

+0

@JonathanPotter Для меня это похоже на домашнее задание, где это «четвертая реализация» одной и той же проблемы (обратная строка) итерационным способом. Если это так, 'std :: reverse', конечно, не является вариантом (или, возможно, будет использоваться в одной из реализаций, которые они должны делать). – leemes

ответ

1

Используйте функцию at string. Не используйте рекурсивный и итеративный вместе.

string Iterative4 (const string& word) 
{ 
    std::string l_bla; 
    bla.reserve(word.size()); 
    for (string::size_type x = word.length (); x > 0; x--) 
    { 

     l_bla += word.at (x -1); 

    } 
    return l_bla; 
} 

это должно работать, но я не испытал его, может быть, вы должны изменить что-то маленькое

EDIT: испытано теперь, и это работает прекрасно

+1

Пропустить слово по ссылке const. –

+0

Обновлено @Neil Kirik – Etixpp

+1

Зарезервировать l_bla по размеру слова. –

0

Непосредственная проблема в том, как, что, если word.length() - 1 не больше 0, то функция Iterative4 не возвращает значение. Поскольку функция объявляется как возвращающая строку, это приводит к неопределенному поведению, которое может включать сбой.

0
string Iterative4(string word) 
{ 
    if (word.length() - 1 > 0) 
    { 
     char last_char = word[word.length() - 1]; 
     word.erase(word.length() - 1); 
     string go = Iterative4(word); 
     return go; 
    } 
    else 
     return word; 
} 

int main() { 
    cout << Iterative4("Loyce") << endl; 
} 

я не проверял.

Если вы настаиваете на рекурсии, эти или подобные они должны работать.

Как домашнее задание, это нормально.

Но если вы хотите сделать какую-то настоящую работу, следует заметить, что рекурсия - очень дорогое действие.

Смежные вопросы