帮助实现在结构体数组中查找名称的二进制搜索
Help with Implementation of binary search for names in an array of structs
我需要使用二进制搜索在结构数组中查找所请求的名称。我使用了一个二进制搜索示例代码,它搜索整型,并将其修改为搜索数组索引,以比较每个结构体中的名称。程序运行了,但是没有找到这个名字,所以肯定有什么地方出了问题。不确定这是否是我从流中获取名称的方式,或者只是我对搜索的实现。谁能看一下提供一些反馈?由于
输入函数的相关代码:
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更小的索引中)
如果您尝试输入以空格分隔的名称,则需要使用std::getline
而不是istream::operator>>
。
既然你也问了一般的反馈。注意,每次迭代都可能对相同的字符串进行两次比较。STRCMP返回小于、等于或大于(-1,0,1)。您可以获取返回值并与之进行进一步的比较…
int result = strcmp(entryName, arrayOfStructs[mid].contactName);
if (result == 0)
found = true;
else
if (result < 0)
high = mid - 1;
else
low = mid + 1;
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 二进制搜索树叶数问题
- 为什么二进制搜索在我的测试中不起作用
- 正在尝试重载二进制搜索树分配运算符
- 我的二进制搜索程序只是关闭了
- 二进制搜索的终止点
- 递归二进制搜索与字符串数组
- 测试树是否为二进制搜索树
- 如何二进制搜索结构向量并在适当的索引处插入
- 如果你有一个固定大小的数组,你需要遍历它!n次,使用二进制搜索如何改变时间复杂性
- 字符串的递归二进制搜索-C++
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 二进制搜索树没有匹配的函数调用
- 二进制搜索不适用于特定输出
- 如何在向量上进行二进制搜索以找到具有特定id的元素
- 二进制搜索树不变的标头文件
- 二进制搜索树插入带参数参考
- 二进制搜索不变以查找元素的首次出现
- 了解一种神秘地起作用的递归二进制搜索算法