我的二进制搜索和线性搜索的问题[关闭]
Posted
技术标签:
【中文标题】我的二进制搜索和线性搜索的问题[关闭]【英文标题】:Problems with my binary search and linear search [closed] 【发布时间】:2011-05-03 08:15:30 【问题描述】:我尝试在搜索中同时使用二分搜索、while 循环和 for 循环,但同样的问题正在发生。
当我原来的程序来这个函数调用的时候,线性搜索函数(displayContent)总会给位置赋值-1,在函数调用之后程序中断退出。
我试图重新安排我的程序。就像我说的,我尝试了使用二分法和线性搜索的 for 循环和 while 循环。
我也在使用结构数据类型
struct info
string name;
double score[5];
double avg;
;
这是我的函数调用
cout<<"Please enter the name of the person which you would like to search. ";
getline(cin, name);
cin.ignore();
displayContent(contestant, count, name);
这是我的函数定义
void displayContent(info contest[], int quantity, string id)
int position=-1;
bool found=false;
for(int index=0;index<quantity && !found;index++)
if(contest[index].name.compare(id)==0)
found=true;
position=index;
if(position==-1)
cout<<"That person was not one of the contestants.";
else
cout<<"The scores for "<<contest[position].name<<" are \n Contestant Judge1 Judge2 Judge3 Judge4 Judge5 Average"
<<"\n______________________________________________________________________"<<endl;
cout<<right<<setw(15)<<fixed<<setprecision(1) <<contest[position].name<<setw(10)<<contest[position].score[0]<<setw(8)<<contest[position].score[1]<<setw(8)<<contest[position].score[2]<<setw(8)<<contest[position].score[3]
<<setw(8)<<contest[position].score[4]<<setw(8)<<contest[position].avg<<endl;
【问题讨论】:
【参考方案1】:您是否确认getline
符合您的预期?也许name
包含一个行尾字符。要排除输入问题,您可以在调用displayContent
之前尝试为name
分配一个您知道存在于contestant
中的值。
我没有发现你的搜索算法有任何问题。
【讨论】:
你的回答确实帮助我发现我的错误不在我的输入或我的算法中,但由于其他未说明的原因,我将此函数调用嵌入到开关中,但该函数有效当我在交换机外使用它时非常好,所以我谢谢你。顺便说一句,当我在开关中使用此功能时,您知道为什么会发生这种情况吗?switch
语句可能会造成混淆。如果case
没有被break
终止,则代码“下降”到下一个case
。此外,局部变量的范围仅在 switch
块内,而不是在每个 case
块内。如果您能够使用调试器单步执行代码,您应该能够确定问题的根源。否则你可以尝试插入额外的调试输出来验证感兴趣的变量的值。以上是关于我的二进制搜索和线性搜索的问题[关闭]的主要内容,如果未能解决你的问题,请参考以下文章