Как проверить, соответствует ли строка элементу массива? - PullRequest
0 голосов
/ 15 апреля 2020

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

#include <iostream>

using namespace std;

int main()
{
    string Username[10] = {"name1", "name2", "name3", "name4", "name5", "name6", "name7", "name8", "name9", "name10"};
    string login;
    int i;

    cout << "Enter username login: ";
    getline(cin, login);
    cout << "\n";

    for (i = 0; i < 10; i++)
        if (login == Username[i])
        {

            cout << "Loading user settings...";
        }
        else
            cout << "Error: Wrong username entered. ";
    return 0;
}

Ответы [ 4 ]

2 голосов
/ 15 апреля 2020

Вы можете избежать l oop и использовать функцию алгоритма std :: find .

 #include <algorithm>
 //...
 bool exists = (std::find(std::begin(Username), std::end(Username), login) 
                != std::end(Username));
1 голос
/ 15 апреля 2020

Вы должны использовать алгоритм, подобный этому:

if (std::find(Username, Username + 10, login) != (Username + 10))
  cout << "Loading user settings...";
else 
  cout << "Error: Wrong username entered. ";
1 голос
/ 15 апреля 2020

Я представляю, что вы хотите увидеть: «Загрузка пользовательских настроек ...», если есть совпадение, и «Ошибка: введено неверное имя пользователя»., Если совпадения нет. Ваше if-выражение должно выглядеть так:

if (login == Username[i]){
  cout << "Loading user settings...";
  break;
}

, а ваше else-выражение должно быть else-if в виде:

else if(i==9) cout << "Error: Wrong username entered. ";

Две вещи:

1) break функционирует таким образом, что, когда программа видит break, она завершает l oop, который она использует в данный момент. Когда вы находите совпадение, вам не нужно смотреть дальше в массиве, так что вырвитесь из него.

2) Вы хотите печатать ошибку, только если вы просмотрели весь массив, и это произойдет только после того, как вы проверили последний элемент, который, в данном случае, имеет индекс 9. Изменение else на else-if позволяет вам указать это условие.

1 голос
/ 15 апреля 2020

Вы можете использовать флаг bool, чтобы проверить, существует ли пользователь:

Рабочий образец

//...
bool exists = false;

//...

for (i = 0; i < 10; i++)
    if (login == Username[i])
    {
        exists = true;
        break;
    } 
exists ? std::cout << "Loading user settings..." : std::cout << "Error: Wrong username entered. ";
//...

На стороне примечание, см. Почему "используется пространство имен std;" считается плохой практикой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...