对象c ++数组的线性搜索

时间:2017-12-08 19:41:17

标签: c++ arrays object search

我的功能有问题.. 我希望函数有两个参数.. 一个是对象数组,第二个是用户给出的代码 并进入运行线性搜索的函数,并检查用户的代码是否存在,如果代码存在将返回其在数组中的位置,否则返回-1 ...

这是我已经尝试过的:

int passwdSearch(Eidos pinPro[], int pass)
{
int i=0;
bool found;
found=false;
while(i<N && found==false)
{
    if(pinPro[i].getPasswd()==pass)
    {
        found=true;
        return i;
    }
    else
        return -1;  
    i++;

}

}

如果密码存在,我希望函数返回位置,否则返回符号数字-1

问题是代码只返回数组的第一个元素和其他4个元素函数返回-1

3 个答案:

答案 0 :(得分:3)

试试这个:

int passwdSearch(Eidos pinPro[], int pass)
{
    for(int i=0; i<N; i++)
    {
        if(pinPro[i].getPasswd()==pass)
            return i;
    }
    return -1;
}

答案 1 :(得分:1)

试用此代码

int passwdSearch(Eidos pinPro[], int pass)
 {
   int i=0;
   bool found;
   found=false;
   while(i<N && found==false)
   {
      if(pinPro[i].getPasswd()==pass)
      {
        found=true;
        return i;
      }
     else
       i++;
   }
  return -1;
}

答案 2 :(得分:0)

如果元素不是数组中的第一个元素,则始终会激活else。你应该删除它,并在while之后返回-1。

int passwdSearch(Eidos pinPro[], int pass)
{
    int i=0;
    bool found;
    found=false;
    while(i<N && found==false)
    {
        if(pinPro[i].getPasswd()==pass)
        {
            found=true;
            return i;
        }
    }
    return -1;
}

这样,如果你通过整个数组并且找不到所需的元素,那么就会返回-1。

修改

正如NathanOliver所提到的那样,发现它是无用的,因为当你找到一个元素时你仍然会返回。所以代码变成了:

    int passwdSearch(Eidos pinPro[], int pass)
    {
        int i=0;
        while(i<N)
        {
            if(pinPro[i].getPasswd()==pass)
                return i;
            i++;
        }
        return -1;
    }