Посчитать количество вхождений каждого слова в текстовом файле
Одному из кандидатов на дожность программиста предложили решить задачу:
Компилировать это надо командой (при условии сохранения в wc.cs):
Запускать так:
Написать программу на C#, подсчитывающую количество вхождений каждого слова в текстовом файле.Его решение показывать не буду, у него нет большого опыта разработки на этом языке, но после того как мы обсудили его решение, он попросил мое решение. Вот оно. Кто напишет лучше?
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
class Program {
static void Main() {
SortedDictionary<string, int> words = new SortedDictionary<string, int>();
foreach (string word in WordIterator(Console.In)) {
int count;
words[word] = words.TryGetValue(word, out count) ? count + 1 : 1;
}
foreach (KeyValuePair<string, int> pair in words)
Console.WriteLine("{1,8} {0}", pair.Key, pair.Value);
}
static IEnumerable<string> WordIterator(TextReader sr) {
StringBuilder sb = new StringBuilder();
int ch;
while ((ch = sr.Read()) != -1) {
char n = char.ToLower((char)ch);
if (char.IsLetter(n))
sb.Append(n);
else if (sb.Length > 0) {
yield return sb.ToString();
sb.Length = 0;
}
}
}
}
Компилировать это надо командой (при условии сохранения в wc.cs):
csc wc.cs
Запускать так:
wc.exe < file.txt
Коментарі