Поменять местами самое длинное и самое короткое слова в строке - C#
Формулировка задачи:
Помогите:Строка состоит из слов, разделенных одним или несколькими пробелами. Поменяйте местами наибольшее по длине слово и наименьшее.
Решение задачи: «Поменять местами самое длинное и самое короткое слова в строке»
textual
Листинг программы
using System;
using System.Linq;
namespace LinqStringSwap
{
class Program
{
static void Main()
{
string s = "a a a a";
var array = s.Split(' ');
int wordMaxLength = array.Select(x => x.Length).Where(x => x > 0).Select(x => x).Max();
string wordMax = array.Where(x => x.Length == wordMaxLength).Select(x => x).First();
int wordMaxIndex = -1;
while (wordMaxIndex == -1)
{
wordMaxIndex = s.IndexOf(wordMax + " ");
if (wordMaxIndex != -1) break;
wordMaxIndex = s.IndexOf(" " + wordMax + " ");
if (wordMaxIndex != -1) break;
wordMaxIndex = s.IndexOf(" " + wordMax);
}
int wordMinLength = array.Select(x => x.Length).Where(x => x > 0).Select(x => x).Min();
string wordMin = array.Where(x => x.Length == wordMinLength).Select(x => x).First();
int wordMinIndex = -1;
while (wordMinIndex == -1)
{
wordMinIndex = s.IndexOf(wordMin + " ");
if (wordMinIndex != -1) break;
wordMinIndex = s.IndexOf(" " + wordMin + " ");
if (wordMinIndex != -1) break;
wordMinIndex = s.IndexOf(" " + wordMin);
}
if (wordMinIndex < wordMaxIndex)
{
s = s.Insert(wordMaxIndex, wordMin).Remove(wordMaxIndex + wordMinLength, wordMaxLength).
Insert(wordMinIndex, wordMax).Remove(wordMinIndex + wordMaxLength, wordMinLength);
}
else
{
s = s.Insert(wordMinIndex, wordMax).Remove(wordMinIndex + wordMaxLength, wordMinLength).
Insert(wordMaxIndex, wordMin).Remove(wordMaxIndex + wordMinLength, wordMaxLength);
}
Console.WriteLine(s);
Console.Read();
}
}
}