线性搜索类对象数组
Posted
技术标签:
【中文标题】线性搜索类对象数组【英文标题】:linear searching an array of class objects 【发布时间】:2013-01-22 21:05:17 【问题描述】:我设置了一个线性搜索算法来搜索它工作的类对象数组,但输出不匹配,当我在数组中搜索特定名称时,会找到数组中的第一个和第三个值,但是未找到第二个值。
以下是我的代码,感谢您的帮助。
int linsearch(string val)
for (int j=0; j <= 3; j++)
if (player[j].getLastName()==val)
return j ;
return 1 ;
void showinfo()
string search;
int found ;
cout << "Please Enter The Player's Last Name : " ;
cin >> search ;
found=linsearch(search);
if (found==1)
cout << "\n There is no player called " << search ;
else
cout << "\n First Name : " << player[found].getFirstName() << "\n" << "Last Name : " << player[found].getLastName() <<
"\n" << "Age : " << player[found].getAge() << "\n" << "Current Team : " << player[found].getCurrentTeam() <<
"\n" << "Position : " << player[found].getPosition() << "\n" << "Status : " << player[found].getStatus() << "\n\n";
cin.get() ;
menu() ;
【问题讨论】:
【参考方案1】:因为您将第二个元素的索引用作“未找到”代码:
int linsearch(string val)
for (int j=0; j <= 3; j++)
if (player[j].getLastName()==val)
return j ;
return 1 ;
你应该返回一些不能作为索引的东西,例如-1
。或者更好的是,使用std::find_if。
【讨论】:
我可以向 OP 建议他使用 -1 而不是 1。【参考方案2】:第二个元素的索引与标记“未找到”条件的值相同。
使用-1
之类的无效索引来标记“未找到”条件:
int linsearch(string val)
for (int j=0; j <= 3; j++)
if (player[j].getLastName()==val)
return j ;
return -1;
然后在调用函数中检查-1
:
if (found==-1)
cout << "\n There is no player called " << search ;
【讨论】:
【参考方案3】:做这样的事情...如果没有找到返回任何其他整数,如'-1'
int linsearch(string val)
for (int j=0; j <= 3; j++)
if (player[j].getLastName()==val)
return j ;
return -1 ;
void showinfo()
string search;
int found ;
cout << "Please Enter The Player's Last Name : " ;
cin >> search ;
found=linsearch(search);
if (found == -1)
cout << "\n There is no player called " << search ;
[...]
【讨论】:
以上是关于线性搜索类对象数组的主要内容,如果未能解决你的问题,请参考以下文章