Задать вопрос
@evans_85

Как использовать переменную типа char?

Как вынуть из массива переменную char, для просмотра в цикле?

string password = Console.ReadLine();
char[] notAllowedSymbols = { '!', '#', '$', '%', '&', '(', ')', '*', ',', '+', '-' };

for (int i = 0; i < notAllowedSymbols; i++)
{
    if (i.Contains(notAllowedSymbols))
        break;
    Console.WriteLine("Invalid");
}
  • Вопрос задан
  • 304 просмотра
Подписаться 2 Простой 4 комментария
Решения вопроса 1
FoggyFinder
@FoggyFinder
Давайте попробуем разобраться.

Массив это ограниченный набор некоторых данных определенного типа.

char[] notAllowedSymbols = { '!', '#', '$', '%', '&', '(', ')', '*', ',', '+', '-' };

здесь, вы объявили массив элементов типа char.

Для доступа к значению в массиве используются индексы.

Первый элемент в массиве доступен по индексу 0.
Второй - по индексу 1.
и так далее.

Можно легко заметить что индекс здесь это по сути просто порядковый номер сдвинутый на единицу.

Теперь возвращаемся к нашему массиву notAllowedSymbols.

Как теперь, учитывая информацию об индексах, получить доступ к какому-нибудь элементу? В C# для это есть индексаторы:

массив[индекс]


значит для получения первого элемента нужно написать

var firstChar = notAllowedSymbols[0]; // '!'

точно также можно получить любой другой элемент указав правильный индекс ([i]).

Теперь что касается приведенной части кода: посыл абсолютно правильный - как только мы убедились что строка содержит запрещенный символ нужно прекратить выполнение и сообщить пользователю об ошибке. Но реализация не совсем точная - break прервет выполнение цикла и пользователь так никогда и не узнает что допустил неточность.

Здесь лучше всего подойдут функции. Вынесем проверку отдельно. Ее результатом может быть или "пройдена успешна" или "содержит ошибки". Всего два значения. Значит, здесь удобно воспользоваться типом bool. True будет означать что пароль подходящий и False будет символизировать ошибку.

Теперь сама реализация

private static bool IsValid(string password)
{
    char[] notAllowedSymbols = { '!', '#', '$', '%', '&', '(', ')', '*', ',', '+', '-' };

    for (int i = 0; i < notAllowedSymbols.Length; i++)
    {
        if (password.Contains(notAllowedSymbols[i]))
        {
            return false;
        }
    }
    return true;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@oleg_ods
1. i - целое число(int), а notAllowedSymbols - массив. В условии цикла for ты сравниваешь число с массивом. Так нельзя. Тебе нужно сравнивать число с длинной массива.
2. В условии if ты проверяешь, что i(которое является целым числом) содержит массив символов. Как может число содержать в себе символы? Судя по всему тебе нужно проверять содержит ли строка password символ из массива notAllowedSymbols с индексом i.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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