Тестер палиндромов на C#
Палиндром - это слово или фраза, которая читается так же назад, как и вперед, например "Аргентина манит негра". В этой статье описывается простой метод проверки валидности палиндрома с использованием основных функций манипулирования строками.
Что такое палиндром?
Палиндром - это слово, фраза или ряд чисел, которые читаются одинаково как вперед, так и назад. Палиндромы могут быть очень короткими. Например, слово "Поп" - это палиндром. Они также могут быть очень длинными фразами. В этих случаях знаки препинания и пробелы не учитываются при определении того, является ли фраза палиндромом. Известный пример такой фразы - "Аргентина манит негра”
Проверка того, является ли строка палиндромом
В этой заметке мы создадим простой метод, который проверяет, является ли данная строка палиндромом. Метод будет следовать трехэтапному процессу. Во-первых, строка будет подготовлена, во-вторых, она будет перевернута и, наконец, будет произведено сравнение результата с исходной строкой.
Для начала создайте новый проект консольного приложения и добавьте новый метод в класс программы следующим образом.
static bool IsPalindrome(string phrase) { }По завершении метода он вернет значение true, если строковый параметр содержит палиндром, и значение false в противном случае.
Подготовка строки
Первым этапом процесса является подготовка строки. Все знаки препинания и пробелы будут удалены, а строка будет преобразована в нижний регистр, так что при реверсировании не потребуется дополнительной работы перед выполнением сравнения исходной и реверсированной строки.
Строка имеет перечислитель, который позволяет перебирать каждый из содержащихся в ней символов, используя цикл foreach. Мы можем использовать это для обработки по одному символу за раз в правильном порядке и добавлять символ в отдельную переменную только в том случае, если это буква или числовая цифра. Для выполнения проверки мы можем использовать метод static IsLetterOrDigit класса char.
Поскольку неэффективно выполнять несколько модификаций строки, символы будут добавлены в объект StringBuilder. По завершении цикла окончательное содержимое StringBuilder может быть скопировано в строку, в данном случае с именем "вперед". Чтобы реализовать этот этап процесса, добавьте в метод следующий код:
StringBuilder cleanPhraseBuilder = new StringBuilder(); foreach (char c in phrase) { if (char.IsLetterOrDigit(c)) cleanPhraseBuilder.Append(c); } string forwards = cleanPhraseBuilder.ToString().ToLower();Реверсирование строки
Строки можно легко поменять местами, используя стандартную функциональность массива. Добавьте приведенный ниже код в метод для выполнения этого шага, удерживая результат в переменной " backwards ".:
char[] characters = forwards.ToCharArray(); Array.Reverse(characters); string backwards = new string(characters);Сравнение строк
Последний шаг - сравнить строки "forwards" и " backwards" с помощью оператора равенства. Этот оператор возвращает значение true или false, поэтому его можно вернуть напрямую, добавив в метод последнюю строку кода.
return forwards == backwards;Тестирование кода
Мы можем протестировать код, выполнив метод на наличие допустимых и недопустимых палиндромов. Попробуйте выполнить следующие примеры, добавив код в метод Main программы:
bool palindrome; palindrome = IsPalindrome("А роза упала на лапу Азора"); // true palindrome = IsPalindrome("А роза не упала на лапу Азора"); // false
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.