두 가지 기능이 있습니다. Find 함수는 키를 찾고 그 위치를 반환 할 때까지 섹션별로 배열을 검색하는 이중 단면 검색을 수행합니다. 함수 removef 또는 (빠른 제거)는 해당 위치를 잡고 문자열 배열에서 제거합니다. 사용자에게 명령 및 문자열 (제거되는 문자열)을 입력하도록 요청하는 명령 줄 인터페이스를 사용하므로 사용자에게 문자열을 묻는 것은 불필요합니다. 여기 양면 검색을 사용하여 배열에서 문자열 제거
은 찾기 기능 키 (중간 중간 위 또는 아래에) 어레이의 상부 또는 하부에 있는지 여부를 결정하도록되어int StringList::Find(string key, int start, int end)
{
int middle = (end + start)/2;
if (key > str[middle])
{
return Find(key,middle,end);
}
else if (key < str[middle])
{
return Find(key,start,middle);
}
else if (key == str[middle])
{
return middle;
}
}
내 찾기 기능 다음이 발견 될 때까지, 분할 계속 인 삭제해야 할 키 또는 문자열 여기
는 removef입니다 :
void StringList::removef(string s)
{
int loc = Find(s,0,10000); //ignore these parameters, i know they are wrong they are just an example
for(int j=loc; j<(numberOfStrings)-1; j++)
{
str[j] = str[j+1];
}
numberOfStrings--;
}
내 문제는 내 찾기 기능은 이중 단면 검색을 사용하여입니다. 내가 고칠 수있는 어떤 제안이라도? 나는 정말로 붙어 있었다. 감사!
바보 같은 질문 일 수 있지만 배열이 정렬되어 있습니까? 또한 문자열이 배열에 없으면 찾기 기능이 작동하지 않습니다. –
@TaylorBrandstetter 네, 알파벳순으로 다른 기능으로 정렬됩니다. 마찬가지로 작동하지 않는 것으로 나는 -1을 반환하지 않을지를 제안하는 if 문을 추가합니다. -1이면 "string not there"라고 인쇄합니다. – WestonBuckeye
그런 경우 Find 함수가 호출 될 때 실제로 정렬되어 있는지 확인합니다. 귀하의 코드는 정렬 된 배열에 대한 나를 위해 작동합니다. –