在没有任何东西的情况下附加到StringBuilder

时间:2017-10-04 12:14:36

标签: c#

我必须向后重新排列一个句子中的单词,但我只能为第一个字母执行此操作。例如:有趣的考试权利。到目前为止我有什么:

var sentance = Console.Readline().Split(' ');
var rearrangedSentence = new StringBuilder();
   for(int i = 0,i<sentance.Lenght,i++)
   {
       rearrangedSentence.Append(sentance[i].Last());//this gives me "nmt"
   }

我的问题是如何在没有任何东西的情况下让这个循环重复。 任何帮助都将受到极大关注:)

编辑:问题是

  

我的意思是,如果我有句子&#34;有趣的考试权利&#34;结果应该是:nmtuahFxgeir。我们首先采用每个单词追加的最后一个字符,结果是&#34; nmt&#34;然后拿下一个并添加它们,得到&#34; nmtuah&#34;等等

1 个答案:

答案 0 :(得分:1)

当您使用sentance[i].Last()时,您只是拾取数组的最后一个元素。

编辑:根据您更新的要求,您可以使用此代码。

           //Get the sentence array
            var sentence = Console.ReadLine().Split(' ');
            var rearrangedSentence = new StringBuilder();

           //Get the length of longest word in array
            int loopLength = sentence.OrderBy(n => n.Length).Last().Length;


            int x = 0;
           // Run for the length of longest word
            for (int i = loopLength-1; i >=0 ; i--)
            {
               // need to pick up an element at every run for each element.
                for (var j = 0; j < sentence.Length; j++)
                {
                    //Picking the position of item to be picked up   
                    int val = sentence[j].Length - (x + 1);
                    // If index not out of bounds
                    if(val >= 0 && val <= sentence[j].Length)
                     {
                        // Pick the character and append to stringbuilder.
                        rearrangedSentence.Append(sentence[j][val]);
                     }
                }
               // Next letter should be n-1, then n-2. 
               // Increase this. Val will decrease
                x++;
            }

            Console.WriteLine(rearrangedSentence.ToString());


            Console.ReadLine();