我必须计算来自给定输入文本的每个单词出现多少次。 我被困的事情:应该忽略字符大小差异。
例如:"你在这里。你是" - >输出:
are=1
here=1
You=3
我做了什么:
string text = "You are here.You you";
IDictionary<string, int> wordsCount = new SortedDictionary<string, int>();
string[] words = text.Split(' ',',','.','-','!');
foreach (string word in words)
{
int count = 1;
if (wordsCount.ContainsKey(word))
count = wordsCount[word] + 1;
wordsCount[word] = count;
}
var items = from pair in wordsCount
orderby pair.Value ascending
select pair;
foreach (var p in items)
{
Console.WriteLine("{0} -> {1}", p.Key, p.Value);
}
如果不手动检查给定文本中的每个单词,都有可能实现这一目标吗?例如,如果我有一个很长的段落,不使用特定方法检查每个单词?
答案 0 :(得分:1)
添加
for(i = 0; text[i] != '\0'; i++){
text[i] = text[i].ToLower();
}
但由于text
是一个字符串,只需执行:
text = text.ToLower();
在string[] words = text.Split(' ',',','.','-','!');
行之前。
然后享受!
答案 1 :(得分:0)
linq怎么样?
var text = "You are here.You you";
var words = text.Split(' ', ',', '.', '-', '!');
words
.GroupBy(word => word.ToLowerInvariant())
.OrderByDescending(group => group.Count())
.ToList()
.ForEach(g=> Console.WriteLine(g.Key + "=" + g.Count()));