使用函数c ++在数组中查找元素

时间:2014-12-16 12:41:45

标签: c++ arrays function search

我是C ++的新手,刚刚开始学习函数。我已经制作了一个程序,使用函数 search 搜索一维数组中的元素。但是我无法理解这个逻辑错误!是因为声明函数的方式吗?

int pos;    
using namespace std;

int search(int *a, int size, int num);

int search(int *a, int size, int num)  
{      
    int i;    
    for(i=0; i<size; i++)    
    {    
        if(a[i]==num)    
        {
            pos=i; return 1;
        }
        else
            return 0;
    }
}

int main()
{  
    int a[5], size, num, i;    
    system("cls");    
    cout<<"Enter size(<5) \n";
    cin>>size;
    cout<<"Enter the elements of the array \n";
    for(i=0; i<size; i++)
        cin>>a[i];
    cout<<"Enter the number to be searched \n";
    cin>>num;
    int b = search( a, size, num);
    if(b==0)
    {
        cout<<"Element not found!"; exit(0);
    }
    else
        cout<<"Element found at position "<<(pos+1);
    system("pause");
    return 0;
}

输出:

Enter size(<5)

4

Enter the elements of the array

4

3

2

1

Enter element to be searched

4

Element not found!

5 个答案:

答案 0 :(得分:2)

您的函数始终在第一次循环迭代中返回。如果第一个元素不是要搜索的元素,则立即返回0。循环永远不会进入第二次迭代。

答案 1 :(得分:0)

如果你没有发现任何东西,你必须返回未找到的东西,使用此代码,如果第一个元素不是你要搜索的内容,你将始终返回零。像这样的东西:

int search(int *a, int size, int num)  
{      
    int i;    
    for(i=0; i<size; i++)    
    {    
        if(a[i]==num)    
        {
            pos=i; return 1;
        }
    }
    return 0;
}

答案 2 :(得分:0)

这是你的逻辑

int search(int *a, int size, int num)  
{      
    int i;    
    for(i=0; i<size; i++)    
    {    
        if(a[i]==num)    
        {
            pos=i; return 1;
        }
        else
            return 0;
    }
}

让我们一步一步。我要给它[1, 2, 3, 4]43

i => 0
a[0] => 1
a[0] == 3 => false
return false

所以,你检查第一个,如果这不起作用,它将立即失败。

所以试试这个:

int search(int *a, int size, int num)  
{      
    for(int i = 0; i < size; ++i)    
    {    
        if(a[i]==num)    
        {
            pos = i;
            return 1;
        }
    }
    return 0;
}

然而,更好的方法是做这样的事情,并摆脱你的全局变量

int search(int *a, int size, int num)  
{      
    for(int i = 0; i < size; ++i)    
    {    
        if(a[i]==num)    
        {
            return i;
        }
    }
    return -1;
}

然后,如果你得到了!= -1,你就找到了它。

答案 3 :(得分:0)

您的search函数未执行您认为正在执行的操作:它将在0后立即返回a[i]!=num,因此不会考虑数组的其余元素。< / p>

你最好使用像这样的东西,返回一个(非全局)变量:

#include <cstdlib>

// returns -1 if not found, else the found index 
int search(int *a, int size, int num)  
{      
    int pos = -1;
    for(int i=0; i<size; i++)
    {
        if(a[i]==num)
        { 
            pos = i;
            break;
        }
    }
    return pos;
}

// ... main() and parsing stuff goes here

if( (b = search( a, size, num)) == -1)
{
    std::cerr<<"Element not found!"; 
    return EXIT_FAILURE;
}

答案 4 :(得分:0)

问题在于你的else语句。如果没有立即找到该元素,它将自动返回0.此外,使用整数0表示找不到该元素,但是如果在位置0找到该元素该怎么办(即它是第一个元素)数组)?然后你仍然会说找不到元素,即使它清楚地存在于数组中。我就是这样做的。

bool search(int *a, int size, int num)
{
    for (int i = 0; i < size; ++i)
    {
        if (a[i] == num)
        {
            cout << "Element found at position " << i << " of the array!" << endl;
            return true;
        }
    }

    cout << "Element not found!" << endl;
    return false;
}

我希望你已经了解了布尔值(即真或假)。由于你的函数的主要目的是搜索,它应该返回是否找到元素(true)或者是否找不到(false)。因此,我们遍历数组,如果找到它,我们输出元素的位置,并返回true。否则,如果我们退出循环,这意味着尚未找到该元素,因此我们输出该元素并返回false。这摆脱了全局变量的使用和我之前提到的问题。