У меня есть алгоритм линейного поиска, настроенный для поиска по массиву объектов класса, он работает, но выходные данные не совпадают, когда я ищу определенное имя в массиве, найдено 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() ;
}
Поскольку вы используете индекс второго элемента в качестве «не найденного» кода:
int linsearch(string val)
{
for (int j=0; j <= 3; j++)
{
if (player[j].getLastName()==val)
return j ;
}
return 1 ;
}
Вы должны вернуть то, что не может быть индексом, например -1
, Или еще лучше, используйте станд :: 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 ;
}
[...]