Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 05.08.2019
Сообщений: 1

Палиндром - учитывать только числа и буквы(игнорируем пробелы, спецсимволы, знаки препинания и т.п.)

05.08.2019, 20:14. Показов 2263. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Помогите с решением задачи:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* 
        Создайте консольное приложение на C# для определения - является ли введенная последовательность символов полиндромом.
        Предусмотреть возможность выбора режима работы приложения(согласно переданному аргументу командной строки при запуске):
 
                1. учитывать только числа и буквы(игнорируем пробелы, спецсимволы, знаки препинания и т.п.);
                2.учитывать все введенные символы. 
*/
 
using System;
 
namespace ConsoleApp1
{
    class Program
    {
        class Palindrom
        {
            public static bool Palindrom1(string str)
            {
                //здесь пытался создать цикл - учитывать только числа и буквы
                return true;
            }
            public static bool Palindrom2(string str)
            {
                int len = str.Length;
                for (int i = 0; i < len / 2; ++i)
                {
                    if (str[i] != str[len - i - 1])
                    {
                        return false;
                    }
                }
                return true;
            }
            static void Main()
            {
                string s;
                Console.Write("Анализ палиндрома\n\nВведите строку: ");
                s = Console.ReadLine();
                int o = 0;
                while (3 > 1)
                {
                    Console.Write("\n1 - Учитывать только числа и буквы\n2 - Учитывать все введенные символы\n3 - Введите новую строку\n0 - Выход\n");
                    Console.Write("\nВыберите пункт: ");
                    o = Convert.ToInt32(Console.ReadLine());
                    if (o > 3)
                    {
                        Console.Write("Вы ввели некорректный пункт!\n");
                        continue;
                    }
                    if (o == 0)
                    {
                        break;
                    }
                    if (o == 1)
                    {
                        if (Palindrom1 (s))
                            Console.WriteLine("\nЭта строка - палиндром");
                        else
                            Console.WriteLine("\nЭта строка - не палиндром");
                    }
                    if (o == 2)
                    {
 
                        if (Palindrom2(s))
                            Console.WriteLine("\nЭта строка - палиндром");
                        else
                            Console.WriteLine("\nЭта строка - не палиндром");                       
                    }
                    if (o == 3)
                    {
                        Console.Write("\nВведите строку: ");
                        s = Console.ReadLine();
                    }
                }
            }
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.08.2019, 20:14
Ответы с готовыми решениями:

Обработать исходный файл и определить число каждого из символов (при этом регистр букв не учитывать, а цифры, знаки препинания и пробелы учитывать)
Задан файл .txt с английским текстом. Обработать исходный файл и определить число каждого из символов (при этом регистр букв не учитывать,...

Сделать, чтобы поле long_text выводило только 950 знаков, включая пробелы и знаки препинания
Нет, нет, делал поиск по сайту, нашел похожее, но там немного другое. У меня проблема поглубже. Вообщем вот сам php код &lt;?php ...

Найти длину самого длинного слова в строке. Знаки препинания не учитывать
Эта программа считает максимальное количество правильно, но знаки препинанию считает частью слова. как исключить знаки препинания, чтобы...

10
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
06.08.2019, 06:55
Используй RegEx
0
 Аватар для Immo
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
06.08.2019, 10:00
Лучший ответ Сообщение было отмечено Mefoge как решение

Решение

C#
1
2
3
4
5
6
7
8
9
public static bool Palindrom1(string str)
            {
                Regex regex = new Regex(@"\w");
                MatchCollection matches = regex.Matches(str);
                string result = null;
                foreach (Match match in matches)
                    result += match.Value;
                return Palindrom2(result);
            }
1
1 / 1 / 3
Регистрация: 20.03.2015
Сообщений: 30
06.08.2019, 14:33
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
 
namespace DeleteThis
{
    internal static class Program
    {
        private static void Main(string[] args)
        {
            List<string> polindroms = new List<string>();
            var includeDebugPolindroms = false;
            Func<string, bool> poliDefineFunction = IsPolindrom;
 
            foreach (var arg in args)
            {
                if (arg.StartsWith("--"))
                {
                    var appArg = arg.Substring(2);
                    switch (appArg)
                    {
                        case "a":
                            poliDefineFunction = IsPolindrom2;
                            break;
                        case "d":
                            includeDebugPolindroms = true;
                            break;
                        default:
                            throw new ArgumentException($"No such argument {appArg}");
                    }
                }
                else
                    polindroms.Add(arg);
            }
 
            if (includeDebugPolindroms)
                polindroms.AddRange(new[] {"ллолл","геереег", "фывхфыв", "asd_adsa", "asd_a_asd", "asd.a.asd"});
 
            foreach (var poli in polindroms)
                ShowPoliInfo(poli, poliDefineFunction);
        }
 
        private static void ShowPoliInfo(string poli, Func<string, bool> func)
        {
            Console.WriteLine($"{ poli }\t{ (func(poli) ? "is" : "is not") } polindrom");
        }
 
        private static bool IsPolindrom(string poli)
        {
            for (var i = 0; i < poli.Length / 2; ++i)
                if (poli[i] != poli[poli.Length - 1 - i])
                    return false;
 
            return true;
        }
 
        private static bool IsPolindrom2(string poli)
        {
            poli = Regex.Replace(poli, "[^A-Za-zА-Яа-я0-9]", "");
            for (var i = 0; i < poli.Length / 2; ++i)
                if (poli[i] != poli[poli.Length - 1 - i])
                    return false;
 
            return true;
        }
    }
}
Использовать
Program ПОЛИНДРОМ1 ПОЛИНДРОМ2 (и т.д.);
Program ПОЛИНДРОМ1 ПОЛИНДРОМ2 --a; //Альтернативная проверка (IsPolinrom2)
Program ПОЛИНДРОМ1 ПОЛИНДРОМ2 --d; //Добавить дебаг - полиндромы
Program ПОЛИНДРОМ1 ПОЛИНДРОМ2 --a --d;
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.08.2019, 18:07
C#
1
2
3
4
5
6
7
8
9
10
11
bool IsPalindrome(string s)
{
    int i = 0, j = s.Length - 1;
    while (i < j)
    {
        if (!char.IsLetterOrDigit(s[i])) i++;
        else if (!char.IsLetterOrDigit(s[j])) j--;
        else if (char.ToLower(s[i++]) != char.ToLower(s[j--])) return false;
    }
    return true;
}
0
1 / 1 / 3
Регистрация: 20.03.2015
Сообщений: 30
06.08.2019, 18:12
Цитата Сообщение от kolorotur Посмотреть сообщение
Как все сложно...
И добавить решение ничуть не проще. Гениально

Добавлено через 3 минуты
Цитата Сообщение от Mefoge Посмотреть сообщение
while (3 > 1)
Кстате, только увидел. "Креативный" вайл тру =P
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.08.2019, 18:46
Deenis, сложность не в количестве строк.
0
1 / 1 / 3
Регистрация: 20.03.2015
Сообщений: 30
06.08.2019, 18:50
Цитата Сообщение от kolorotur Посмотреть сообщение
Deenis, сложность не в количестве строк.
В понимании "что происходит".

Я не спорю, что это решение лучше по производительности. Но в плане читабельности решение на уровне WTF
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.08.2019, 19:02
Цитата Сообщение от Deenis Посмотреть сообщение
решение на уровне WTF
Ну если у вас простейший цикл с тремя условиями проблемы с пониманием вызывает, то я не знаю...
0
1 / 1 / 3
Регистрация: 20.03.2015
Сообщений: 30
06.08.2019, 19:06
Цитата Сообщение от kolorotur Посмотреть сообщение
Ну если у вас простейший цикл с тремя условиями проблемы с пониманием вызывает, то я не знаю...
Я прочитал, понял, оценил производительность и читаемость. И тут мне пишут про проблемы с пониманием. Тут мои полномочия всё
0
 Аватар для Immo
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
07.08.2019, 09:46
можно еще проще)
C#
1
2
3
4
5
bool IsPalindrome(string s)
        {
            string replaced = Regex.Replace(s, @"\W", "");
            return replaced.SequenceEqual(replaced.Reverse());
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.08.2019, 09:46
Помогаю со студенческими работами здесь

Расставить знаки препинания и убрать лишние пробелы
Убрать лишние пробелы, расставить знаки препинания. Пример: «First sentence Second sentence.» !!!!!РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ НЕ...

Заменив пробелы символами табуляции и удалив знаки препинания
Вывести на экран введенную строку, предварительно заменив пробелы символами табуляции и удалив знаки препинания «.», «,» и «;».

Удалить из строки все знаки препинания. Пробелы оставить
Подскажите как это можно реализовать через, к примеру find

Как вставить пробелы и знаки препинания в расшифрованном тексте?
N = str('Qpna, vjg hqqn? yqwnf vcmg').lower().split() D = ans = A = str('cdefghijklmnopqrstuvwxyzab ').lower() B =...

В строке заменить все знаки препинания на пробелы. Вывести результат
помогите


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru