Тестер палиндромов на 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си шарп, палиндром, строки




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



Состояния потоков и планирование их выполнения
Атрибут role в HTML: что надо знать
Пример работы с BackgroundWorker C++ и заставляем работать Refresh