2011-01-28 4 views
1

내 문제는 두 문자열 s1, s2의 공통 부분 문자열을 반환하려는 것입니다. 분명히 s1과 s2는 대칭입니다.매개 변수에 대한 사본을 만들거나 참조를 사용 하시겠습니까?

string shortest_common(const string& s1, const string& s2) { 

} 

내가 해낸이 문제에 대한 세 가지 가능한 솔루션이 있습니다

  • 어느 내가 그들의 CONST을 희생해야 의미를 (S1)의 사본과 S2
  • 을 또는 교환이 --ness
  • 최악의 경우, 중복 코드!

개인적으로는 첫 번째 경우를 선호합니다. 의도적으로 s1 또는 s2를 변경하지 않는 가장 짧은 공통 문자열을 찾는 것입니다. 그래서 내 질문은 :이 경우 어떤 옵션이 이상적입니까? 내가 선택하는 것

감사합니다,

+0

을 그들은 대칭 의미 상동이야? 마찬가지로 'abba'와 'cabbac'은 유효한 입력이며 'abba'가 결과가됩니까? – mkb

+5

기다림, 가장 짧은 공통 문자열? 그 대답은 항상 ""이기 때문에 그것은 흥미롭지 않습니다. :) – mkb

+0

@Matt Kane : 그것은 수정 된 버전이지 전통적으로 회문색이 아닙니다. 그것은 내가 다루어야하는 많은 하위 사례를 가지고 있습니다. – Chan

답변

2

당신이 표시 한 서명으로 이동합니다. 일반적인 하위 문자열을 찾으면 부작용을 원하지 않습니다. 그것은 사람들이 당신의 기능을 부를 때 사람들이 생각하는 것이 아닙니다. 나는 "add_two_numbers"라는 함수가 숫자 중 하나를 수정하고 값을 반환한다고 기대하지 않습니다.

+0

당신의 생각이 내 것과 일치했습니다;). 나는이 옵션을 갈 것이다. – Chan

0

재귀를 사용하여 개체 자체를 변경하지 않고 매개 변수의 의미를 바꿀 수 있습니다.

+0

Ben Voigt : 고마워! – Chan

0

나는 실제 질문이 무엇인지 혼란스러워서 제목으로 판단하겠습니다.

모두를 수행

void shortest_common(string& s1, const string& s2) 
{ 
    // real algorithm changing s1 
} 

inline string shortest_common(string s1, const string& s2) 
{ 
    shortest_common(s1, s2); 
    return s1; 
} 
+0

@sbi : 솔루션을 제공해 주셔서 감사합니다. – Chan

+0

@sbi : 매개 변수를 복사하려는 경우 pass by value를 사용하여 복사본을 만드는 것이 더 좋지 않습니까? (그리고 실제로 C++ 0x에서 "실제 구현은 rvalue-reference를 사용할 것이고 전달자는'std :: move'를 사용할 것입니다.) –

+0

@Ben : 당신 말이 맞아요. – sbi

관련 문제