计算文件c#中每个唯一单词的出现次数

时间:2015-02-23 17:13:28

标签: c#

我正在编写一个简单的控制台应用程序,以便让我计算每个唯一单词的出现次数。 例如,控制台将允许用户键入一个句子,一旦按下输入系统应该计算每个单词出现的时间。到目前为止,我只能算数字。任何帮助,将不胜感激。

class Program
{
    static void Main(string[] args)
    {

        Console.WriteLine("Please enter string");
        string input = Convert.ToString(Console.ReadLine());
        Dictionary<string, int> objdict = new Dictionary<string, int>();
        foreach (var j in input)
        {
            if (objdict.ContainsKey(j.ToString()))
            {
                objdict[j.ToString()] = objdict[j.ToString()] + 1;
            }
            else
            {
                objdict.Add(j.ToString(), 1);
            }
        }
        foreach (var temp in objdict)
        {
            Console.WriteLine("{0}:{1}", temp.Key, temp.Value);
        }
        Console.ReadLine();
    }
}

5 个答案:

答案 0 :(得分:1)

试试这个......

var theList = new List<string>() { "Alpha", "Alpha", "Beta", "Gamma", "Delta" };

theList.GroupBy(txt => txt)
    .Where(grouping => grouping.Count() > 1)
    .ToList()
    .ForEach(groupItem => Console.WriteLine("{0} duplicated {1} times with these values {2}",
         groupItem.Key,
         groupItem.Count(),
         string.Join(" ", groupItem.ToArray())));
        Console.ReadKey();

http://omegacoder.com/?p=792

答案 1 :(得分:0)

试试这个方法:

private void countWordsInALIne(string line, Dictionary<string, int> words)
{
    var wordPattern = new Regex(@"\w+");

    foreach (Match match in wordPattern.Matches(line))
    {
        int currentCount=0;
        words.TryGetValue(match.Value, out currentCount);

        currentCount++;
        words[match.Value] = currentCount;
    }
}

像这样调用上面的方法:

var words = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);

countWordsInALine(line, words);

在单词词典中,您将找到单词(键)及其出现频率(值)。

答案 2 :(得分:0)

只需调用Split方法传递单个空格(假设单词由单个空格分隔),它将给出每个单词的集合,然后使用您所拥有的相同逻辑迭代集合的每个元素。

class Program
{
    static void Main(string[] args)
    {

        Console.WriteLine("Please enter string");
        string input = Convert.ToString(Console.ReadLine());
        Dictionary<string, int> objdict = new Dictionary<string, int>();
        foreach (var j in input.Split(" "))
        {
            if (objdict.ContainsKey(j))
            {
                objdict[j] = objdict[j] + 1;
            }
            else
            {
                objdict.Add(j, 1);
            }
        }
        foreach (var temp in objdict)
        {
            Console.WriteLine("{0}:{1}", temp.Key, temp.Value);
        }
        Console.ReadLine();
    }
}

答案 3 :(得分:0)

您需要在空格(或您考虑分隔单词的任何其他字符)上拆分字符串。尝试将循环更改为:

foreach (string Word in input.Split(' ')) {

}

答案 4 :(得分:0)

我可以建议使用三元树来提高效率吗?

以下是C#实施的链接:http://igoro.com/archive/efficient-auto-complete-with-a-ternary-search-tree/

首次插入树后,您只需使用上述实现之一调用“Contains”即可快速完成