微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

帮助实现二进制搜索结构数组中的名称

如何解决帮助实现二进制搜索结构数组中的名称

|| 我需要使用二进制搜索在结构数组中查找请求的名称。我使用了一个二进制搜索示例代码,该代码搜索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小的索引中)     

解决方法

如果尝试输入用空格分隔的名称,则需要使用
std::getline
而不是
istream::operator>>
。     ,由于您还要求提供一般反馈。注意,您可能在每次迭代中两次比较相同的字符串。 strcmp返回其小于,等于还是大于(-1,1)。您可以获取返回值,并执行所有进一步的比较...
int result = strcmp(entryName,arrayOfStructs[mid].contactName);
if (result == 0)            
   found = true;        
else           
  if (result < 0)              
    high = mid - 1;           
  else              
    low = mid + 1; 
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。