Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace albina_12
- {
- class Program
- {
- static string ToOneString(string s)
- {
- // эта функция превращает строку например вида "ворона кОкОс __=ПОМОГИ:6754те" в вид "воронакокоспомогите"
- string result = "";
- // в нижний регистр
- s = s.ToLower();
- foreach (char c in s)
- {
- // если символ является символом латиницы или кириллицы то берем его
- if (c <= 'я' && c >= 'а' || c <= 'z' && c >= 'a')
- result += c;
- }
- return result;
- }
- static string ReverseString(string s)
- {
- // тупо разворачиваем строку торобоан
- string result = "";
- for(int i = 0; i < s.Length; i++)
- result += s[s.Length - 1 - i];
- return result;
- }
- static bool IsPalindrome(string s)
- {
- // проверяем является ли строка палиндромом
- // перед вызовом этой функции мы должны сию строку прогнать через ToOneString
- // а то вдруг там нечисть всякая
- // если там 1 символ то палиндром, если 2 то сравниваем их
- if (s.Length < 2)
- return true;
- else if (s.Length == 2)
- return s[0].Equals(s[1]);
- // start & end - первая & вторая половина слова соответственно
- string start, end;
- // если в строке четное кол-во символов
- if (s.Length % 2 == 0)
- {
- start = s.Remove(s.Length / 2);
- end = s.Replace(start, "");
- }
- else
- {
- start = s.Remove((s.Length / 2));
- end = s.Replace(start, "");
- end = end.Remove(0, 1);
- }
- // Equals возвращает true или false, в зависимости от того, одинаковы ли строки (start и end наоборот)
- return start.Equals(ReverseString(end));
- }
- static void Main(string[] args)
- {
- // считываем текст построчно (одна строка - один палиндром или просто слово или любой текст
- // программа проверяет на являемость палиндромом только в отношении кириллицы и латиницы
- // это значит, что фразы "соси писос", "С О СИП иСо С", "СОСИПИСО____+_+№))+№"(;*?с", "с1ос1и2п3и4с6о7с" БУДУТ палиндромами
- // ибо мы их всех приводим в вид ТОЛЬКО кириллицы/латиницы нижнего регистра, т.е. к виду "сосиписос"
- // читаем из файла инпут.тхт
- string s = System.IO.File.ReadAllText(@"input.txt"), tmp;
- // split разделяет целый стринг на массив стрингов (строк), ибо они были вида "one\r\ntwo\r\nthree\r\n"
- string[] words = s.Split('\n');
- int i = 0;
- bool found = false;
- Console.Write("Ищем палиндромы в файле input.txt:\n");
- foreach (string ss in words)
- {
- tmp = ToOneString(ss);
- if (IsPalindrome(tmp))
- {
- Console.WriteLine((i + 1) + ". " + words[i]);
- found = true;
- }
- i++;
- }
- if (!found)
- Console.Write("\nА их там и нет :c");
- else
- Console.Write("\nЭто и были палиндромы");
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment