Найти слова, которые отличны от последнего слова и являются симметричными - C#
Формулировка задачи:
Дана строка. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела, за последним словом - точка.
Найти и сохранить в строке те слова последовательности, которые отличны от
последнего слова и являются симметричными. Все остальные слова удалить. На языке C#Помогите пожалуйста!
Решение задачи: «Найти слова, которые отличны от последнего слова и являются симметричными»
textual
Листинг программы
using System;
using System.Linq;
namespace ConsoleApplication19
{
class Program
{
static void Main(string[] args)
{
string str = "а роза упал а на лапу азор а.";//если нужно учитывать регистр оставлем так, иначе .ToLower();
str = str.Substring(0, str.Length - 1);//точка нам не нужна
char[] c = new char[1];//массив нужен для использования StringSplitOptions.RemoveEmptyEntries (удаляем пустые вхождения)
c[0] = ' ';
string[] ar = str.Split(c, StringSplitOptions.RemoveEmptyEntries);//режем строку на слова, игнорим массовые пробелы
var a = ar.Where(x=> !x.Equals(ar[ar.Length - 1]));//отбираем все слова не равные последнему
foreach (string s in a)
{
if(IsEqualRevers(s, ar))
Console.Write("{0}", s + " ");
}
Console.ReadKey();
}
//проверяет слово на наличие его зеркального собрата в массиве
static bool IsEqualRevers(string s, string[] ar)
{
char[] ch = s.ToCharArray();//дробим на буквы
string reverseWord = "";
foreach(char c in ch.Reverse())
reverseWord+=c.ToString();//собираем в обратном порядке
var a = ar.Where(x => x.Equals(reverseWord));//берём только равные reverseWord
foreach (string v in a)
{
return true;//есть полное совпадение с реверсированным словом
}
return false;//нет
}
}
}