Вам нужен другой цикл в вашей первой:
string allowed = "abc";
string read= Console.ReadLine();
for (int i = 0; i < read.Length; i++)
{
bool isValid = false;
for (int j = 0; j < allowed.Length; j++)
{
if (read[i] == allowed[j])
{
isValid = true;
break;
}
}
if (isValid)
{
Console.WriteLine("Okay");
}else{
Console.WriteLine("Invalid char on" +index);
}
}
Прямо сейчас, что вы говорите, «каждый символ read
должен быть точно такой же, как и в allowed
». То, что вы пытаетесь сказать (я думаю), - «каждый символ в read
должен присутствовать где-то в allowed
» - вот что делает второй цикл. Он ищет персонажа в allowed
и, если он его найдет, устанавливает isValid
в true
. В противном случае символ не был найден, и он неверен.
Как и другие ответы здесь состояние, вы можете использовать LINQ или (желательно) регулярные выражения (регулярное выражение) для подобных вещей. Я предполагаю, что это домашняя работа, или вы новичок в C# или программировании, поэтому я дал базовый ответ (надеюсь) помочь вам понять, что не работает в настоящее время с вашим кодом.
Если это действительно вопрос homerwok или вопросов, связанных с обучением, то позвольте мне порекомендовать вас поставить это в ваш вопрос в следующий раз, так как не обязательно спрашивать о домашнем задании.
Решения «реального мира», которые мы будем использовать, не помогут вам, если вы пытаетесь выяснить основы, поэтому, если мы знаем, что это касается учебных материалов, тогда мы предоставим вам более полезные ответы ,
насчет 'если (разрешено == чтения)' ? – Habib
Значит, ты говоришь, что мне даже не нужна петля? – user3320668
Нет, если вы собираетесь сравнивать строки в текущем сценарии. Вы также можете посмотреть перегрузку «String.Equals», которая также обеспечивает нечувствительность к регистру. – Habib