0

公式の質問: ユーザーから文を入力するコンソール アプリケーションを作成し (句読点がないものとします)、重複していない単語を判別してアルファベット順に表示します。大文字と小文字を同じように扱います。[ヒント: 引数なしで文字列メソッド Split を使用すると、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 に答える