【问题标题】:linear search on array of object c++对象数组的线性搜索c ++
【发布时间】:2018-05-23 02:22:46
【问题描述】:

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

【问题讨论】:

  • 提示:此代码永远无法到达您的i++;。在到达那条线之前,你总是从函数中return
  • 老兄,std::find_if
  • 并非所有代码路径都返回值...
  • found 布尔变量完全没用。考虑删除它。

标签: c++ arrays object search


【解决方案1】:

试试这个:

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

【讨论】:

  • 那里清理得很好。
【解决方案2】:

试试这个代码

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;
}

【讨论】:

    【解决方案3】:

    如果元素不是数组中的第一个元素,else 将始终被激活。您应该删除它,并在一段时间后返回 -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 所提到的,found 是无用的,因为当你找到一个元素时,你无论如何都会返回。于是代码变成了:

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

    【讨论】:

    • found=true; 是不必要的,因为您从下一行的函数返回。
    • @nathanOliver 是的,我只是快速更改它以使其正常工作,编辑错误,谢谢。
    • 缺少i++。另请注意,这是 c++,您可以使用 for 循环 for(int i = 0; i &lt; N; i++)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2021-01-20
    相关资源
    最近更新 更多