Мне нужно использовать бинарный поиск, чтобы найти запрошенное имя в массиве структур.Я использовал пример кода двоичного поиска, который искал ints и модифицировал его для поиска по индексу массива, чтобы сравнить имена в каждой структуре.Программа запускается, но имя так и не найдено, поэтому что-то определенно идет не так.Не уверен, что это так, как я беру имя из потока или просто мою реализацию поиска в целом.Может ли кто-нибудь взглянуть, предоставить некоторую обратную связь?спасибо
соответствующий код из функции ввода:
char entryName[31];
char discard;
string entryNameString;
cout << "What is the name of the entry you would like to look up?" << endl;
cin >> entryNameString;
cin.get(entryName, 30);
cin.get(discard);
findName(listLength, arrayOfStructs, entryName);
функция двоичного поиска:
void findName(int listLength, contactInfo* arrayOfStructs, const char* entryName)
{
bool found = false;
int low = 0, high = listLength-1, mid;
while (!found && low <= high)
{
mid = (low + high) / 2;
if (strcmp(entryName, arrayOfStructs[mid].contactName) == 0)
found = true;
else
if (strcmp(entryName, arrayOfStructs[mid].contactName) < 0)
high = mid - 1;
else
low = mid + 1;
}
if (found)
{
cout << arrayOfStructs[mid].contactName << endl;
cout << arrayOfStructs[mid].birthday << endl;
cout << arrayOfStructs[mid].addressInfo.streetName << endl;
cout << arrayOfStructs[mid].addressInfo.cityName << endl;
cout << arrayOfStructs[mid].addressInfo.state << " ";
cout << arrayOfStructs[mid].addressInfo.zipcode << " ";
cout << arrayOfStructs[mid].addressInfo.phoneNumber << endl;
cout << arrayOfStructs[mid].typeOfentry << endl;
}
else
cout << "NOT FOUND" << endl;
}
РЕДАКТИРОВАТЬ: arrayOfstructs []. contactName упорядочено в алфавитном порядке (например, .contactName = Amanda, находится в меньшем индексе, чем .contactName = Zorak)