나는 무작위 방법으로 문자열 일치 알고리즘을 수행하려고합니다. 하지만 알고리즘이 제대로 작동하지 않습니다, 나는 바운드 인덱스 오류가 나타납니다.문자열 일치 알고리즘을 수정하려고 시도했습니다.
여기
int main() {
string s = "NOBODY_NOTICED_HIM";
string pattern="NOT";
int index = 0;
for (int i = 0; i < s.size();)
{
for (int j = 0; j < pattern.size();)
{
if(s[index] == pattern[j])
{
j++;
i++;
}
else
{
index = i;
j = 0;
}
}
}
cout<<index<<endl;
return 0;
}
FIXED VERSION
내가 바운드 예외의 아웃 고정 내 알고리즘이다. 알고리즘이 다른 문자열
j
미만
pattern.size()
하지만 당신은 또한 체내
i
를 증가하는 동안 루프 조건을 가지고 루프 내부 때문에
int main() {
string s = "NOBODY_NOTICED_HIM";
string pattern="NOT";
int index = 0;
int i = 0;
while(i < s.size())
{
i++;
for (int j = 0; j < pattern.size();)
{
if(s[index] == pattern[j])
{
index++;
j++;
cout<<"i is " <<i << " j is "<<j <<endl;
}
else
{
index = i;
break;
}
}
}
cout<<i<<endl;
return 0;
}
올바른 문제 해결 도구는 디버거입니다. 스택 오버플로를 묻기 전에 코드를 단계별로 실행해야합니다. 자세한 도움말은 [작은 프로그램 디버깅 방법 (Eric Lippert 작성)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)을 참조하십시오. 문제를 재현하는 [최소, 완료 및 확인 가능] (http://stackoverflow.com/help/mcve) 예제와 함께 해당 질문을 \ [편집]해야합니다. 디버거. –
지금 디버거가 없습니다. 나는 이데온을 테스트에 사용하고있다. – Andre
작은 프로그램을 디버깅하는 방법 _ 제안서가 여전히있다. –