Как извлечь элемент из массива на основе ввода?

В настоящее время я работаю над программой, и мне было интересно, если так или иначе, чтобы ввести элемент из массива и найти элемент в том же месте параллельного массива.

string names[3]={"Jim", "John", "Jeff"};
int num[3]={1,2,3};
cout<<"Enter either Jim, John, or Jeff"<<endl;
cin<<name;

Если бы мне нужно было ввести имя «Джон», как бы я получил вывод, чтобы распечатать что-то вроде:
«У Джона номер 2»

0

Решение

Написать цикл

for (int i = 0 i < 3; ++i)
{
if (name == names[i])
{
cout << name " has the number " << num[i] << "\n";
break;
}
}
2

Другие решения

Если вы действительно не обязаны использовать параллельные массивы, вы можете рассмотреть std::map или же std::unordered_map, которые предназначены именно для такой проблемы:

std::map<std::string, int> people{
{ "Jim", 1 },
{ "John", 2 },
{ "Jeff", 3 }
};

std::cout << "Please enter a name: ";
std::string name;
std::cin >> name;

auto pos = people.find(name);
if (pos != people.end())
std::cout << name << " has the number: " << pos->second;
2

C ++ не предоставляет этого для массивов, но вы можете использовать std::find от <algorithm> библиотека, которая может работать с использованием двух итераторов.

Итераторы являются обобщением указателей, и вы можете использовать этот алгоритм также с помощью указателей; Пример этого метода:

string *s = std::find(names, names+3, name);
int index = s - names; // 0, 1 or 2; if not present it will be 3
0
По вопросам рекламы [email protected]