线性搜索类对象的数组

linear searching an array of class objects

本文关键字:数组 对象 线性搜索      更新时间:2023-10-16

我设置了一个线性搜索算法来搜索它工作的类对象数组,但输出不匹配,当我在数组中搜索特定名称时,可以找到数组的第一个和第三个值,但找不到第二个值。

下面是我的代码,感谢您的帮助。

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()  << "nn";
    }
    cin.get() ;
    menu() ;
}

因为您将第二个元素的索引用作"未找到"代码:

int linsearch(string val)
{
    for (int j=0; j <= 3; j++)
    {
        if  (player[j].getLastName()==val)
         return j ;         
    }
        return 1 ;
}   

您应该返回不能成为索引的内容,例如 -1 。或者更好的是,使用std::find_if。

第二个元素的索引与标记"未找到"条件的值相同。

使用无效索引(如 -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 ;
}

做这样的事情...如果未找到,则返回任何其他整数,如"-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 ;
}
[...]