using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace _03_CountWordsInText
{
class CountWords
{
static void Main(string[] args)
{
StreamReader inputText = new StreamReader("text.txt");
string[] words;
char[] separators = new char[] { ' ', ',', '.', '!', '?', '-', '_', '\n', '\r' };
using (inputText)
{
string allText = inputText.ReadToEnd();
words = allText.Split(separators, StringSplitOptions.RemoveEmptyEntries);
}
SortedDictionary<string, int> wordCount = new SortedDictionary<string, int>();
foreach (string word in words)
{
if (wordCount.ContainsKey(word.ToLower()))
{
wordCount[word.ToLower()]++;
}
else
{
wordCount.Add(word.ToLower(), 1);
}
}
List<KeyValuePair<string, int>> result = new List<KeyValuePair<string, int>>();
foreach (KeyValuePair<string,int> pair in wordCount)
{
result.Add(pair);
}
result.Sort((a, b) => { return a.Value.CompareTo(b.Value); });
foreach (KeyValuePair<string,int> pair in result)
{
Console.WriteLine("{0} -> {1} time(s).", pair.Key, pair.Value);
}
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0Owp1c2luZyBTeXN0ZW0uSU87CgpuYW1lc3BhY2UgXzAzX0NvdW50V29yZHNJblRleHQKewogICAgY2xhc3MgQ291bnRXb3JkcwogICAgewogICAgICAgIHN0YXRpYyB2b2lkIE1haW4oc3RyaW5nW10gYXJncykKICAgICAgICB7CiAgICAgICAgICAgIFN0cmVhbVJlYWRlciBpbnB1dFRleHQgPSBuZXcgU3RyZWFtUmVhZGVyKCJ0ZXh0LnR4dCIpOwogICAgICAgICAgICBzdHJpbmdbXSB3b3JkczsKICAgICAgICAgICAgY2hhcltdIHNlcGFyYXRvcnMgPSBuZXcgY2hhcltdIHsgJyAnLCAnLCcsICcuJywgJyEnLCAnPycsICctJywgJ18nLCAnXG4nLCAnXHInIH07CiAgICAgICAgICAgIHVzaW5nIChpbnB1dFRleHQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cmluZyBhbGxUZXh0ID0gaW5wdXRUZXh0LlJlYWRUb0VuZCgpOwogICAgICAgICAgICAgICAgd29yZHMgPSBhbGxUZXh0LlNwbGl0KHNlcGFyYXRvcnMsIFN0cmluZ1NwbGl0T3B0aW9ucy5SZW1vdmVFbXB0eUVudHJpZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIFNvcnRlZERpY3Rpb25hcnk8c3RyaW5nLCBpbnQ+IHdvcmRDb3VudCA9IG5ldyBTb3J0ZWREaWN0aW9uYXJ5PHN0cmluZywgaW50PigpOwogICAgICAgICAgICBmb3JlYWNoIChzdHJpbmcgd29yZCBpbiB3b3JkcykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHdvcmRDb3VudC5Db250YWluc0tleSh3b3JkLlRvTG93ZXIoKSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgd29yZENvdW50W3dvcmQuVG9Mb3dlcigpXSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHdvcmRDb3VudC5BZGQod29yZC5Ub0xvd2VyKCksIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIExpc3Q8S2V5VmFsdWVQYWlyPHN0cmluZywgaW50Pj4gcmVzdWx0ID0gbmV3IExpc3Q8S2V5VmFsdWVQYWlyPHN0cmluZywgaW50Pj4oKTsKICAgICAgICAgICAgZm9yZWFjaCAoS2V5VmFsdWVQYWlyPHN0cmluZyxpbnQ+IHBhaXIgaW4gd29yZENvdW50KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXN1bHQuQWRkKHBhaXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlc3VsdC5Tb3J0KChhLCBiKSA9PiB7IHJldHVybiBhLlZhbHVlLkNvbXBhcmVUbyhiLlZhbHVlKTsgfSk7CiAgICAgICAgICAgIGZvcmVhY2ggKEtleVZhbHVlUGFpcjxzdHJpbmcsaW50PiBwYWlyIGluIHJlc3VsdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInswfSAtPiB7MX0gdGltZShzKS4iLCBwYWlyLktleSwgcGFpci5WYWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K