2013-07-19 3 views
0

아래 코드는 두 문자열에 대한 일치 시작 색인의 임의 값을 반환합니다. 예를 들어 s = Mississippi 및 t = sip 인 경우 함수는 6을 반환해야합니다. 코드를 반환하기 전에 m의 값을 출력하도록 코드를 설정했습니다. 사실, 내 프로그램은 6을 출력하지만 수백만의 값을 무작위로 반환합니다.두 문자열의 일치 색인을 찾는 재귀 적 해결책

int index_of_sub(string s, string t, int m) 
{ 
    if(s.length() - m < t.length()) 
    { 
    return -1; 
    } 
    if(s.substr(m, t.length()) == t) 
    { 
    cout << m << endl; 
    return m; 
    } 
    else 
    { 
    index_of_sub(s, t, m + 1); 
    } 
}//end index_of_sub function 
int index_of(string s, string t) 
{ 
    return index_of_sub(s, t, 0); 
}//end index_of function 
+0

우선,'=='비교가 문자열에 대해 작동하는지 알고 있습니까? –

+0

@ user7348 녹색 체크 표시를 클릭하여 대답을 수락 할 수 있습니다. 제발 그만 해! – jlars62

답변

1

return 성명을 마지막으로 else에 입력해야합니다.

else 
{ 
    return index_of_sub(s, t, m + 1); 
    ^^^^^^ 
} 

이 재귀 호출의 결과를 명시 적으로 반환하지 않으므로 가비지 값이 반환되므로 이러한 비정상적인 결과가 발생합니다.

+0

좋은 직장 jlars62. 얼마나 당황 스럽습니까! 미안, 너를 업신여 할 수 없어. 방금 가입했습니다. 그리고 당신이 알 수 있듯이, 방금 프로그래밍을 시작했습니다. – user7348