Как перевернуть в C# текст чтобы было "У лукоморья дуб зеленый" стало "зеленый дуб лукоморья У"?

я начинающий падаван которому нужна помощь от всемогущих джедаев.


Ответы (3 шт):

Автор решения: Dev

Использйте стэк. Первый пришел, последний вышел. Пример реализации с https://docs.microsoft.com/

public static void Main()  {

  // Создание и наполнение.
  Stack myStack = new Stack();
  myStack.Push("Hello");
  myStack.Push("World");
  myStack.Push("!");

  // Вывод.
  PrintValues( myStack ); }



public static void PrintValues( IEnumerable myCollection )  {
      foreach ( Object obj in myCollection )
         Console.Write( "    {0}", obj );
      Console.WriteLine();
   }

Если у Вас уже есть набор слов массивом, просто вставьте все значения туда, если у Вас все одной строкой - то используйте string.Split чтобы разделить все.

var collection = myString.Split(' ');
→ Ссылка
Автор решения: Andrei Khotko

Если у вас есть уже массив отдельных слов, то тогда используйте метод Reverse(). :

var reversedLines = string.Join(' ', lines.Reverse());
Console.WriteLine(reversedLines);

Если нужно получить другой результат, то опишите подробнее, что на входе и на выходе.

UPD. С учетом уточненных условий задачи (валидацию не писал, потому что вопрос был именно в том, как перевернуть слова текста):

static void Main(string[] args)
{
    var text = "john,have,some,question,for,you.";
    Console.WriteLine($"Before: {text}");

    text = text.Remove(text.Length - 1); // Удаляем точку, чтобы при сплите не входила в последнее слово
    var words = text.Split(',');
    var reversedText = string.Join(' ', words.Reverse());

    Console.WriteLine($"After : {reversedText}");
}
→ Ссылка
Автор решения: OXYGEN

Вот решение: за основу взято

У лукоморья дуб зеленый

на выходе получаем

зеленый лукоморья дуб У

вот как работает :

string row = "У лукоморья дуб зеленый";
string s =  WordsCange(row, "зеленый", 0);

в предложении 4 слова значит 4 позиции на которые можно поставить слово


Сам метод:

        /// <summary>
        /// Метод меняет слова местами
        /// </summary>
        /// <param name="row"> строка с исходным текстом </param>
        /// <param name="word">слово которое хотим поменять местами</param>
        /// <param name="pos">позиция на которую ставим слово начинается с 0 </param>
        /// <returns>возвращает String с измененной строкой</returns>
        string WordsCange(string row, string word, int pos)
        {
            var splitedRow = row.Split(' ');

            int index = 0;
            for (int i = 0; i < splitedRow.Length; i++)
            {
                if (splitedRow[i] == word)
                {
                    index = i;
                }
            }

            string tmp = splitedRow[pos];
            splitedRow[pos] = word;

            splitedRow[index] = tmp;

            string newRow = "";
            foreach (var curnetword in splitedRow)
            {
                newRow += curnetword + " ";
            }

            return newRow;
        }
→ Ссылка