Каким образом считать символы в словах циклом? C#
Нужно каким-то образом создать условие, которое будет проверять, сколько символов в слове, которое взято из текста, который находится в файле, сравнило его с запрошенным количеством, а затем продолжило это делать до конца StreamReader'а. Количество символов в слове должно быть меньше заданной длины.
Console.WriteLine("Имя файла: text.txt");
Console.WriteLine("Максимум букв в слове: ");
int wordlength = int.Parse(Console.ReadLine());
string s = "";
string[] textMass;
StreamReader sr = new StreamReader("text.txt");
while (sr.EndOfStream != true)
{
s += sr.ReadLine();
}
textMass = s.Split(' ');
Console.WriteLine("Выполняю анализ: ");
int i = 0;
while (i <= textMass.Length)
{
Console.Write(". ");
i++;
}
Console.WriteLine();
Console.WriteLine("Анализ завершён: ");
Console.WriteLine("Количество слов: " + textMass.Length);
sr.Close();
Console.ReadLine();
Вот, собственно, код, он работает, но не выполняет последней нужной задачи, не фильтрует слова по длине. Прошу помощи у вас, знатоки.
Ответы (1 шт):
Автор решения: srvr4vr
→ Ссылка
Вариант использую LINQ без стримов:
static void Main(string[] args)
{
Console.WriteLine("Имя файла: text.txt");
Console.WriteLine("Максимум букв в слове: ");
int wordlength = int.Parse(Console.ReadLine());
Console.WriteLine("Выполняю анализ: ");
var wordsSmallerThan = File.ReadAllLines("C:\\tmp\\text.txt")
.SelectMany(line => line.Split(" "))
.Where(word => word.Length < wordlength);
Console.WriteLine();
Console.WriteLine("Анализ завершён: ");
Console.WriteLine("Количество слов: " + wordsSmallerThan.Count());
Console.ReadKey();
}
Поправлю ваш вариант со стрим ридером (без загрузки всего текста в память)
static void Main(string[] args)
{
Console.WriteLine("Имя файла: text.txt");
Console.WriteLine("Максимум букв в слове: ");
var wordlength = int.Parse(Console.ReadLine());
var result = 0;
Console.WriteLine("Выполняю анализ: ");
//стримы и прочие IDispoisible ресурсы оборачивайте в using
using (var sr = new StreamReader("C:\\tmp\\text.txt"))
{
while (sr.EndOfStream != true)
{
var line = sr.ReadLine();
var smallerWordsCount = line?.Split(" ")?.Count(word => word.Length < wordlength) ?? 0;
result += smallerWordsCount;
}
}
Console.WriteLine();
Console.WriteLine("Анализ завершён: ");
Console.WriteLine("Количество слов: " + result);
Console.ReadLine();
}