линейный поиск в массиве объектов класса

У меня есть алгоритм линейного поиска, настроенный для поиска по массиву объектов класса, он работает, но выходные данные не совпадают, когда я ищу определенное имя в массиве, найдено 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 ;
}
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, Или еще лучше, используйте станд :: find_if.

6

Другие решения

Индекс второго элемента идентичен значению, которое помечает условие «не найдено».

Используйте недопустимый индекс как -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 ;
}
2

сделать что-то вроде этого … вернуть любое другое целое число, например «-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 ;
}

[...]
0
По вопросам рекламы [email protected]