如何在字符串中找到第三个最长的单词

时间:2012-11-21 02:05:49

标签: c#

你好我有点卡住我不知道如何找到一个字符串中的第三个最长的单词,我有我的代码找到最长但我不能设法得到它找到第三长。有什么帮助吗?

public void longestWord()
    {
        string sentance, word;
        word = " ";
        char[] a = new char[] { ' ' };
        sentance = textBox1.Text;  //<--string here


        foreach (string s1 in sentance.Split(a))
        {
            if (word.Length < s1.Length)
            {
                word = s1;
            }
        }
        label9.Text = ("The longest word is " + word + " and its length is " + word.Length + " characters long");
    }

P.S字符串im测试的一个例子是:

     1。

    DarkN3ss是我最有经验的Windows商业解决方案提供商。我专注于提供我的商业价值,以最好地了解这些技术和方向。 DarkN3ss认为我是基于我在Windows和Linux产品方面的能力和经验实施解决方案的“精英业务合作伙伴”。

6 个答案:

答案 0 :(得分:2)

如何使用linq?

sentance.Split(' ').OrderByDescending(w => w.Length).Skip(2).FirstOrDefault()

在一个函数中:

public void nthLongestWord(int index = 0)
{
    string word = null;
    if(index <= 0)
    {
        word = sentance.Split(' ').OrderByDescending(w => w.Length).FirstOrDefault();
    }
    else
    {
        word = sentance.Split(' ').OrderByDescending(w => w.Length).Skip(index - 1).FirstOrDefault();
    }


    if(!string.IsNullOrWhitespace(word))
    {
        label9.Text = ("The longest word is " + word + " and its length is " + word.Length + " characters long");
    }
    else 
    {
        // display something else?
    }
}

答案 1 :(得分:1)

如果您想对当前代码进行微小更改,那么您应该做的是存储三个最长的单词(即代替wordword1,{{1} },和word2,或者你喜欢的数组。

然后,在if语句中,设置word3 = word2,word2 = word1,word1 = s1。

这样,第三大单词将以word3结尾。

效率最高,但您可以在一定程度上保留当前的代码。

答案 2 :(得分:1)

解决方案:获取所有第三大词

   string[] splitStr = sentence.Split(' ');

   if (splitStr.Length > 2)
   {
        List<int> allLengths = splitStr.Select(x => x.Length).Distinct().ToList();

        int thirdLargestWordLength = allLengths.OrderByDescending(x => x)
                                               .Skip(2).Distinct().Take(1).FirstOrDefault();

        if (splitStr[0].Length != thirdLargestWordLength && 
         splitStr[1].Length != thirdLargestWordLength)
         {

            string[] theThirdLargestWords = splitStr.Where(x => x.Length == thirdLargestWordLength)
                                                                  .ToArray();


             if (theThirdLargestWords.Length == 1)
             {
                label9.Text = "The third longest word is " + theThirdLargestWords[0];
             }
             else
             {
                string words = "";

                for (int i = 0; i < theThirdLargestWords.Length; i++)
                {
                   if (i == 0)
                   {
                     words = theThirdLargestWords[i];
                }
               //else if ((i + 1) == theThirdLargestWords.Length)
               //{
               //   words += " and " + theThirdLargestWords[i];
               //}
                else
                {
                    words += ", " + theThirdLargestWords[i];
                }
             }

             label9.Text = "The third longest words are " + words;
        }
      }
   }

我注释掉了“和”部分因为我不确定你是否想要在你的字符串中。我还添加了第一个if语句,这样如果你有少于3个单词就不会出错。

答案 3 :(得分:0)

如果您觉得使用临时阵列感觉很舒服,那么您应该将您的文字复制到那里,对它们进行排序,并选择第3个最长的文字。

答案 4 :(得分:0)

这可能有编译错误,但只是为了给你一个想法。

var words = sentence.split();

words.OrderBy(w =&gt; w.length)。ToArray()[2]

答案 5 :(得分:0)

GroupBy长度解决方案

var thirdLongests = words.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).GroupBy(x => x.Length).OrderByDescending(x => x.Key).Skip(2).First().ToArray();