0

官方问题:编写一个控制台应用程序,输入来自用户的句子(假设没有标点符号),然后确定并按字母顺序显示不重复的单词。对大写和小写字母一视同仁。[提示:您可以使用不带参数的字符串方法拆分,如 sentence.Split() 中,将句子分解为包含单个单词的字符串数组。默认情况下,Split 使用空格作为分隔符。在 LINQ 查询的 select 和 orderby 子句中使用字符串方法 ToLower 来获取每个单词的小写版本。]

这是我到目前为止所拥有的:

static void Main(string[] args)
        {   // Creates list of type string
            List<string> list = new List<string>();
            // Writes for sentence
            Console.Write("Enter your sentence. No punctuation.   : ");
            // Converts console into string
            string sent = (Console.ReadLine());
            // Splits string into array
            string[] words = sent.Split();
            // Writes array to list
            for (int i = 0; i < words.Length; i++)
            {
                list.Add(words[i]);
            }
            // Sorts words
            var sort =
                from word in list
                let lowerWord = word.ToLower()
                orderby lowerWord
                select lowerWord;

            // I assume a var query goes here to delete dup words

            // Writes words
            foreach (string c in sort)
            {
                Console.WriteLine(c);
            }
        }

我不知道如何找到重复项并删除它们。

4

3 回答 3

2

var unique = sort.Distinct();

为你工作?

于 2011-04-04T04:35:52.293 回答
1
    public static IEnumerable<string> GetAlphabetizedUniqueWords(string sentence)
    {
        return (sentence ?? string.Empty)
            .Split()
            .Select(x => x.ToLowerInvariant())
            .Distinct()
            .OrderBy(x => x);
    }


    static void Main( )
    {
        Console.Write("Enter your sentence. No punctuation.   : ");
        foreach (var word in GetAlphabetizedUniqueWords(Console.ReadLine()))
            Console.WriteLine(word);
    }
于 2011-04-04T04:41:03.853 回答
1

排序后,遍历列表,并将每个单词与前一个单词进行比较。如果它们匹配,则删除该单词。由于列表已排序,因此所有重复项必须相邻。

于 2011-04-04T04:41:45.670 回答