@Ghoo
Изучаю C# и C++

Сравнение массива и введеного пользователя числа?

Допустим, вот массив
int num[4] = {
    4, 6, 9, 11
};

Вот переменная user_num, в которую пользователь введет данные.
Как через условие проверить, правильно ли ввел пользователь число, которое находится в массиве?
Тобиж как сравнить массив с user_num через условие.
  • Вопрос задан
  • 926 просмотров
Решения вопроса 2
@Narts
Циклом проходить по массиву и сравнивать введенное число с числом текущего элемента

Можно использовать функцию std::find:
#include <algorithm> // for std::find
#include <iterator> // for std::begin, std::end

int main () 
{
  int a[] = {3, 6, 8, 33};
  int x = 8;
  bool exists = std::find(std::begin(a), std::end(a), x) != std::end(a);
}

но std::find это все тот же цикл, который ищет число в массиве
template<class InputIterator, class T>
  InputIterator find (InputIterator first, InputIterator last, const T& val)
{
  while (first!=last) {
    if (*first==val) return first;
    ++first;
  }
  return last;
}
Ответ написан
myjcom
@myjcom Куратор тега C++
для упорядоченной последовательности
эффективным считается Двоичный поиск
std::binary_search
bsearch
или использовать (если нет повторяющихся значений) подходящий контейнер
например

#include <iostream>
#include <set>
#include <algorithm>
#include <iterator>

using namespace std;

int main()
{
  set<int> nums;
  generate_n(inserter(nums, nums.end()), 42, []{ return rand() % 42; });
  int n = 0; cin >> n;
  cout << "\n" 
       << ((nums.find(n) != nums.end()) ? "" : "Not ") 
       << "Found" 
       << endl;
}



А без цикла никак?

Можно (нужно ли) и без цикла, функцией

#include <iostream>

bool find(int a[], int sz, int value)
{
  if(sz == -1)
    return false;
  else if(a[sz] == value)
    return true;
  else
    return find(a, sz - 1, value);
}

int main()
{
  int nums[] = { 4, 6, 9, 11 };

  int i = 0;

  std::cin >> i;

  std::cout << "\n" 
            << std::boolalpha 
            << find(nums, sizeof(nums) / sizeof(int) - 1, i);
}

Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы