Как уже указывалось в другом ответе, вы должны добавить параметр размера к сигнатуре функции, чтобы иметь возможность итерировать массив (особенно знать, когда остановить итерацию). Тогда простой цикл со сравнением сделает трюк.
Обратите внимание, что обычно не нужно использовать необработанные массивы на C++, а один из контейнеров из стандартной библиотеки, например, std::vector
. Кроме того, вы должны использовать std::string
и std::getline()
для ввода вашего пользователя, и вы должны исправить свои строковые литералы (используйте двойные кавычки «...» вместо одинарных кавычек «...»). Кроме того, вам следует избегать using namespace std;
. Взгляните на ссылки в конце этого сообщения для дальнейшего чтения по этим вопросам.
Пример кода:
#include <iostream>
#include <string>
#include <vector>
bool exists(std::string const & user_input,
std::vector<std::string> const & words)
{
for (int i = 0; i < words.size(); i++)
if (user_input == words[i])
return true;
return false;
}
int main() {
std::vector<std::string> words(5);
words[0] = "abc";
words[1] = "bcd";
words[2] = "cde";
words[3] = "def";
words[4] = "efg";
std::string user_input;
std::getline(std::cin, user_input);
if (exists(user_input, words))
std::cout << "found\n";
else
std::cout << "not found\n";
}
Пример вывода:
$ g++ test.cc && echo "abc" | ./a.out
found
Следующая может быть выходит за рамки вашего школьного задания, но, возможно, это будет полезно для будущих посетителей этого вопрос.
Обратите внимание, что массив (который std::vector
is) не является наиболее эффективной структурой данных для выполнения такого рода задач, так как вы должны итерировать весь массив, чтобы проверять каждый элемент (линейная сложность).
Стандартная библиотека C++ также предоставляет типы контейнеров std::set
и std::unordered_set
(последняя с C++ 11). Здесь пространство поиска организовано особым образом (двоичное дерево поиска: логарифмическая сложность, хеш-таблица: постоянная сложность в среднем), чтобы улучшить время поиска ключевого типа (std::string
в этом случае).
Вот пример:
#include <iostream>
#include <string>
#include <set>
typedef std::set<std::string> set_type;
bool input_exists(std::string input, set_type const & words) {
return words.find(input) != words.end();
}
int main() {
set_type words = {"abc", "bcd", "cde", "def", "efg"};
std::string input;
if (std::getline(std::cin, input)) {
std::cout << "input: '" << input << "' ";
if (input_exists(input, words))
std::cout << "found\n";
else
std::cout << "not found\n";
}
}
Пример вывода:
$ g++ test.cc -std=c++11
$ echo "abc" | ./a.out
input: 'abc' found
$ echo "abcdefg" | ./a.out
input: 'abcdefg' not found
Для справки:
Подробнее о циклах –
... и строковых литералах. – WhozCraig
И словари. –