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 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; 
} 

이 작동합니다,하지만 난 그것을 테스트 didnt는은, 어쩌면 당신은 편집

작은 뭔가 변경해야합니다 : 지금 테스트를하고 나는 그것을 테스트하지 않았다 완벽하게

+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; 
} 

작동합니다.

재귀를 주장하는 경우 이러한 또는 이러한 sth 작동합니다.

숙제로는 괜찮습니다.

그러나 실제 작업을 수행하려면 재귀가 매우 비싼 작업임을 알아야합니다.

관련 문제