Алгоритм палиндром


Этот код может быть лучше?

Это алгоритм:

  1. Сравните 1-го персонажа до последнего символа
  2. Сравнивать 2-й персонаж на второй последний символ и так далее
  3. Стоп, когда посреди строки достигается
  4. Просто слова
namespace Palindrome
{
    class Class1
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("Digit a word:");
                string word = Console.ReadLine();

                if (word == "exit")
                    break;

                VerifyPalindrome(word);
            }
        }

        private static void VerifyPalindrome(string word)
        {
            bool compare = true;
            int i = 0;
            while (i < word.Length- 1)
            {
                if (compare)
                {
                    for (int j = word.Length - 1; j >= 0; j--)
                    {
                        if (word[i] == word[j])
                            compare = true;
                        else
                        {
                            compare = false;
                            break;
                        }
                        i++;
                    }
                }
                else
                    break;
            }

            if (compare)
                Console.WriteLine("This is a Palindrome word");
            else
                Console.WriteLine("This is NOT a Palindrome word");
        }
    }
}


1020
0
задан 23 февраля 2018 в 10:02 Источник Поделиться
Комментарии
2 ответа

Как уже говорилось, Вы не должны установить его в true несколько раз.
Там чище синтаксис для этого.

static bool IsPalidrone(string word)
{
for (int i = 0, j = word.Length - 1; i < j; i++, j--)
{
if (word[i] != word[j])
{
return false;
}
}
return true;
}

6
ответ дан 23 февраля 2018 в 11:02 Источник Поделиться

Одна вещь я хотел бы изменить это ответственность VerifyPalindrome(string word). Помните, что ваша функция должна только проверить, есть ли word - палиндром, больше ничего. Он не должен распечатать значение, но вместо того, чтобы возвращать логическое значение, которое проверяет ли слово палиндромом или нет. Измените функцию:

private static bool VerifyPalindrome(string word)
{
bool compare = true;

// ... computing code

return compare;
}

И в Main:

if(VerifyPalindrome(word))
{
Console.WriteLine("This is a Palindrome word");
}
else
{
Console.WriteLine("This is NOT a Palindrome word");
}

Другая вещь, которую я хотел бы изменить это ваша логика палиндром. Вместо того, чтобы отслеживать переменную compare для Является ли строка палиндромом или нет и через breakы, что увеличивает сложность кода, Вы можете уменьшить функцию к следующему, с несколько returnС:

private static bool VerifyPalindrome(string word)
{
int i = 0;
while (i < (word.Length / 2) - 1)
{
for (int j = word.Length - 1; j >= 0; j--)
{
if (word[i] != word[j])
return false;
i++;
}
}
return true;
}

Нет, вы могли бы еще больше сократить, объединив две петли в одну, но я оставлю это в качестве упражнения для вас.

2
ответ дан 23 февраля 2018 в 11:02 Источник Поделиться