Подсчитать сколько раз в текст1 встречается слово - C#
Формулировка задачи:
Помогите сделать все эти задания, сам я не могу.
Вот задания:
1. В тексте1 ввести любую фразу. В текст2 ввести слово. Подсчитать сколько раз в текст1 встречается слово, заданное в текст2.
Решение задачи: «Подсчитать сколько раз в текст1 встречается слово»
textual
Листинг программы
using System;
using System.Diagnostics;
using System.Linq;
namespace ConsoleAppExperiments
{
class TimeMesurer : IDisposable
{
private Stopwatch stopwatch = new Stopwatch();
public TimeMesurer()
{
this.stopwatch.Start();
}
public void Dispose()
{
this.stopwatch.Stop();
Console.WriteLine("Time elapsed: {0,10:N0}", this.stopwatch.ElapsedMilliseconds);
Console.WriteLine();
}
}
class UsagaWordCounter
{
enum WordCountState
{
Init,
ComparingWord,
SkippingWord,
WhiteSpace
}
public static int CountWords(string originString, string word)
{
int wordCounter = 0;
CharEnumerator wordCharEnumerator = word.GetEnumerator();
WordCountState state = WordCountState.Init;
foreach (Char c in originString)
{
if (c == ' ' || Char.IsPunctuation(c))
{
switch (state)
{
case WordCountState.Init:
case WordCountState.SkippingWord:
state = WordCountState.WhiteSpace;
break;
case WordCountState.ComparingWord:
if (!wordCharEnumerator.MoveNext())
{
wordCounter++;
}
state = WordCountState.WhiteSpace;
break;
}
}
else
{
switch (state)
{
case WordCountState.Init:
case WordCountState.WhiteSpace:
wordCharEnumerator.Reset();
wordCharEnumerator.MoveNext();
state = (c == wordCharEnumerator.Current)
? WordCountState.ComparingWord
: WordCountState.SkippingWord;
break;
case WordCountState.ComparingWord:
if (!wordCharEnumerator.MoveNext() ||
wordCharEnumerator.Current != c)
{
state = WordCountState.SkippingWord;
}
break;
}
}
}
if (state == WordCountState.ComparingWord && !wordCharEnumerator.MoveNext())
{
wordCounter++;
}
return wordCounter;
}
}
class Program
{
private static char[] SEPARATORS = { ' ', ',', '.', '!', ':', ';', '(', ')', '«', '»' };
static int CountWordWithSplit(string sourseText, string word)
{
return sourseText.Split(SEPARATORS, StringSplitOptions.RemoveEmptyEntries).Count(x => x == word);
}
static int CountWordManually(string sourceText, string word)
{
return UsagaWordCounter.CountWords(sourceText, word);
}
static void Main(string[] args)
{
string warAndPeace = Resource1.warAndPeace;
string peaceWord = "мир";
Console.WriteLine("Source data length: {0:N0}\n", warAndPeace.Length);
Console.WriteLine("Split, cold iteration");
using (var mesurer = new TimeMesurer())
{
Console.WriteLine("Words found: {0:N0}", CountWordWithSplit(warAndPeace, peaceWord));
}
Console.WriteLine("Manual, cold iteration");
using (var mesurer = new TimeMesurer())
{
Console.WriteLine("Words found: {0:N0}", CountWordManually(warAndPeace, peaceWord));
}
for (int i = 0; i < 3; i++)
{
Console.WriteLine("-----------");
Console.WriteLine("Split, hot iteration #{0}", i);
using (var mesurer = new TimeMesurer())
{
Console.WriteLine("Words found: {0:N0}", CountWordWithSplit(warAndPeace, peaceWord));
}
//GC.Collect();
//GC.WaitForFullGCComplete();
Console.WriteLine("Manual, hot iteration #{0}", i);
using (var mesurer = new TimeMesurer())
{
Console.WriteLine("Words found: {0:N0}", CountWordManually(warAndPeace, peaceWord));
}
}
Console.WriteLine("press any key...");
Console.ReadKey();
}
}
}