我正在编写一个简单的控制台应用程序,以便让我计算每个唯一单词的出现次数。 例如,控制台将允许用户键入一个句子,一旦按下输入系统应该计算每个单词出现的时间。到目前为止,我只能算数字。任何帮助,将不胜感激。
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();
}
}
答案 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();
答案 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”即可快速完成