Это мой код, я хочу попытаться сравнить свой массив с числом, но в основном я даю мне некоторую ошибку, я пытаюсь найти число с помощью линейного поиска и распечатать индекс этого числа в c ++

   // linear search 
    #include <iostream>
    using namespace std;
    
    int search(int arr, int n, int x)
    {
        int i=0;
        for (i = 0; i < n; i++){
            if (arr[i] == x){
                return i;}
        }
        return -1;
    }
    
    // Driver code
    int main(void)
    {
        int size;
        int temp;
        cout << "Enter Size of Arry";
        cin >> size;
        int  arr[size];
        for(int i=0;i<size;i++){
            cout << "Enter a " << i << "Element of your arry : ";
            cin >> temp;
            arr[i]=temp;
    
        }
        
    
         cout << "Enter the number that you will find index";
            int x;
         cin >> x;
        // Function call
        int result = search(arr, size, x);
        (result == -1)
            ? cout << "Element is not present in array"
            : cout << "Element is present at index " << result;
        return 0;
    }

Это ошибка

PS C:\Users\talha\OneDrive\Desktop\Study_Material\DSA_lab\cs201149_lab1_3C> g++ Q1.cpp -o Q11.exe
Q1.cpp: In function 'int search(int, int, int)':
Q1.cpp:9:12: error: invalid types 'int[int]' for array subscript
   if (arr[i] == x){
            ^
Q1.cpp: In function 'int main()':
Q1.cpp:35:34: error: invalid conversion from 'int*' to 'int' [-fpermissive]
  int result = search(arr, size, x);
                                  ^
Q1.cpp:5:5: note:   initializing argument 1 of 'int search(int, int, int)'
 int search(int arr, int n, int x)
     ^~~~~~
PS C:\Users\talha\OneDrive\Desktop\Study_Material\DSA_lab\cs201149_lab1_3C> 
1
Talha Iqbal 27 Ноя 2021 в 11:29

2 ответа

Лучший ответ

Во-первых в C ++ размер массива должен быть константой времени компиляции . Итак, возьмем, например, следующие фрагменты кода:

int n = 10;
int arr[n]; //INCORRECT because n is not a constant expression

Правильный способ написать это:

const int n = 10;
int arr[n]; //CORRECT

Точно так же следующее (что вы сделали в своем примере кода) неверно:

    int size;
    int temp;
    cout << "Enter Size of Arry";
    cin >> size;
    int  arr[size];//INCORRECT because variable size is not a constant  expression

Вам следует использовать std::vector для своих целей, как показано ниже:

#include <iostream>
#include <vector>
using namespace std;
//the first argument is a vector<int>
int search(std::vector<int> arr, int x)
{
    int i=0;
    for (i = 0; i < arr.size(); i++){//use size()member function
        if (arr[i] == x){
            return i;}
    }
    return -1;
}

// Driver code
int main(void)
{
    int size;
    int temp;
    cout << "Enter Size of Arry";
    cin >> size;
    //create a vector instead of an array 
    std::vector<int> arr(size);
    for(int i=0;i<arr.size();i++){//use the size member function
        cout << "Enter a " << i << "Element of your arry : ";
        cin >> temp;
        arr[i]=temp;

    }
    

     cout << "Enter the number that you will find index";
        int x;
     cin >> x;
    // Function call
    int result = search(arr,  x);//no need to pass the size of the vector
    (result == -1)
        ? cout << "Element is not present in array"
        : cout << "Element is present at index " << result;
    return 0;
}

Обратите внимание, что вы также можете использовать std::find вместо написания собственного алгоритма поиска.

1
Anoop Rana 27 Ноя 2021 в 11:55
Спасибо, брат, это очень помогает, но после компиляции моей программы, закройтесь, вы можете мне объяснить, почему это должно происходить
 – 
Talha Iqbal
27 Ноя 2021 в 12:19
Пожалуйста. Можете ли вы указать, в какой точке (строке) программы у вас возникли дальнейшие сомнения? Из вашего последнего комментария было неясно, о чем именно вы спрашиваете. Не могли бы вы пояснить, какие еще сомнения (если таковые имеются) у вас есть.
 – 
Anoop Rana
27 Ноя 2021 в 12:23

Для начала такие массивы переменной длины

int  arr[size];

Не является стандартной функцией C ++. Вместо этого было бы гораздо лучше использовать стандартный контейнер std::vector<int> в программе на C ++.

Во-вторых, объявление функции неверно. Первый параметр объявлен как имеющий тип int.

int search(int arr, int n, int x)

Вам нужно объявить функцию следующим образом

int search(int arr[], int n, int x)

Или эквивалентно

int search(int *arr, int n, int x)

Обратите внимание, что в C ++ существует стандартный алгоритм std::find, который выполняет поиск элемента в контейнере.

0
Vlad from Moscow 27 Ноя 2021 в 11:42