2013-11-19 2 views
0

Я беру класс C++ в этом семестре в школе и получил проект, в котором мне нужно написать программу, которая запрашивает у пользователя число и останавливается при вводе 0, а затем сохраняет числа в массив а затем предложите пользователю ввести номер и найти массив для этого числа, если это число, хранящееся в массиве, тогда я возвращаю «НАЙДЕН!». и если я не вернусь «НЕ НАЙДЕН!» Мне нужно выполнить поиск через функцию.Простой поиск в C++ Array

У меня есть все, что сделано для программы, кроме функции поиска. Мне сказали исследовать в Интернете, как это сделать, и применить его к моей программе, но проблема в этом классе мы учили только тому, как использовать цикл while(), и каждая найденная функция поиска, похоже, просто просматривает мои потому что это очень простой класс C++.

Может ли кто-нибудь помочь мне?

ответ

0

Здесь булева функция search, которая принимает три параметра: array, то size этого массива, и target номер для поиска (я использую for цикл):

bool search(int array[], int size, int target) 
{ 
    for (int i = 0; i < size; ++i) 
    { 
     if (array[i] == target) 
     { 
      return true; 
     } 
    } 

    return false; 
} 

можно распечатать "FOUND!" или "NOT FOUND!" всякий раз, когда search возвращает true или false, соответственно.

+0

Ok. Итак, когда я буду называть эту функцию, какими будут параметры? 'num' - это имя моего массива, и максимальный размер моего массива равен '25'. Я думал, что могу выполнить поиск (num, 25), но тогда я не знаю, что поставить для целевого параметра при вызове. Извините, если я говорю глупо, я не слишком хорош или опыт с этим языком =/ – user3010876

+0

В OP вы пишете: * «... предложите пользователю ввести ** номер ** и найдите массив для это ** номер ** ... "*. Это «цель», которую вы ищете. – Raptor

0

Функция может выглядеть следующим образом

bool search(int a[], int size, int value) 
{ 
    int i = 0; 

    while (i < size && a[i] != value) i++; 

    return (i != size); 
} 

Использование функции будет следующий

if (search(YourArray, ActualNumberOfArrayElements, value)) 
{ 
    std::cout << "Value " << value << " found in the array" << std::endl; 
} 
else 
{ 
    std::cout << "Value " << value << " did not find in the array" << std::endl; 
} 
0

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

#include <iostream> 
#include <vector> 
using namespace std; 

int main() { 
    // Array of numbers with dynamic size 
    // At first it contains 0 elements 
    vector<int> haystack; 

    // "Forever" loop 
    for (;;) { 
     // The new number 
     int n; 

     // Input that number. 
     // Do you know that `cin >> c` returns `cin` 
     // to let us write something like 
     // `cin >> a >> b`? It works like 
     // `(cin >> a) >> b` => 
     // `cin >> b` => 
     // `cin` which doesn't go anywhere. It's just `cin`. 
     // Also, `cin` can be implicitly cast (um, I mean "transformed") 
     // to `bool`. So the following line not 
     // just asks for a number, but tests if 
     // number input succeeded. 
     if (!(cin >> n)) { 
      // User pressed Ctrl+Z to end input 
      // or it was something like "abc" 
      // instead of a number. 
      break; 
     } 
     if (n == 0) { 
      // User gave us zero. 
      break; 
     } 

     // Add new element in an array, 
     // save `n` in it 
     haystack.push_back(n); 
    } 

    // Number we will search in that array 
    int needle; 
    cin >> needle; 

    ///////////////////////////////////////////////////////// 
    // Easy way: 
    ///////////////////////////////////////////////////////// 

    // Here's a boolean flag. 
    // `true` value in it means that we've currently found 
    //  the number 
    // `false` means that we still didn't found it 
    bool found = false; 

    // Iterate over all numbers we've recently got 
    // `haystack.size()` is a quantity of that numbers 
    // Call to `size()` takes more time than reading value 
    // from a variable, so we'd better save it in a variable `ilen`. 
    // `size()` returns value of `size_t` type. It's usually an 
    // integer without a sign. 
    for (size_t i = 0, ilen = haystack.size(); i < ilen; ++i) { 
     // Test if i-th number is the one we search for 
     if (haystack[i] == needle) { 
      // Yay, it is! Set the flag to true. 
      found = true; 
      // Exit loop, as we don't care for all the other values 
      break; 
     } 
    } 

    // Don't ever write `found == true` to test if boolean flag is true. 
    // ==, != and other comparison operators do return boolean values. 
    if (found) { 
     cout << "FOUND" << endl; 
    } else { 
     cout << "NOT FOUND" << endl; 
    } 
    // Also you could write it with ternary operator ("short if") 
    // cout << (found ? "FOUND" : "NOT FOUND") << endl; 

    ///////////////////////////////////////////////////////// 
    // Harder ways 
    ///////////////////////////////////////////////////////// 

    // You could iterate over items in that array like 
    // for (vector<int>::const_iterator it = haystack.begin(), 
    //  iend = haystack.end(); it != iend; ++it) { 
    //  if (*it == needle) { ... } 
    //} 
    // It's kinda hardcore, but performs well. 

    // You could even go nuts and use some stuff from 
    // <algorithm> header 
    // if (find(haystack.begin(), haystack.end(), needle) !=haystack.end()) { 
    //  cout << "FOUND" << endl; 
    // } else { 
    //  cout << "NOT FOUND" << endl; 
    // } 
    // Look, ma, no loops! 
} 
+0

Если вам нужно использовать автономную функцию для поиска этого значения, вы можете использовать последний '' трюк из этого ответа, поэтому вам даже не нужно писать эту функцию! –