Поиск подстроки в строке
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
>
nom;//Объявление строки с результатами поиска
public Form1()
{
InitializeComponent();
//Отключение кнопки: "Выполнить поиск"
button3.Enabled = false;
//Отключение кнопок выбора алгоритма
radioButton1.Enabled = false;
radioButton2.Enabled = false;
radioButton3.Enabled = false;
radioButton4.Enabled = false;
label2.Text = "";
}
//Событие - клик на кнопку Выбрать файл поиска
private void button1_Click(object sender, EventArgs e)
{
//Очистка исходной строки
str = "";
//Фильтр открываемых файлов
openFileDialog1.Filter = "Text files (*.TXT)|*.txt";
//Очистка имени открываемого файла
openFileDialog1.FileName = "";
//Если файл выбран
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
FileStream TextFile = new FileStream(openFileDialog1.FileName, FileMode.Open);
//Запись имени открываемого файла в элемент формы
label2.Text = openFileDialog1.SafeFileName.Substring(0, openFileDialog1.SafeFileName.Length - 4);
//Закрытие потока данных
TextFile.Close();
using (StreamReader sr = new StreamReader(openFileDialog1.FileName,Encoding.Default))
{
//Считывание текста в строку
str = sr.ReadToEnd();
}
//Включение кнопок выбора алгоритмов
radioButton1.Enabled = true;
radioButton2.Enabled = true;
radioButton3.Enabled = true;
radioButton4.Enabled = true;
}
}
//Событие - клик на кнопку Выполнить поиск
private void button3_Click(object sender, EventArgs e)
{
//Если окно искомого фрагмента пустое - сообщение об ошибке
if (textBox1.Text == "")
MessageBox.Show("Отсутствует искомый фрагмент","Ошибка");
//Выполнение поиска искомого фрагмента
else
{
//Если выбран последовательный поиск
if (radioButton1.Checked == true)
{
Stopwatch stopWatch = new Stopwatch();
//Старт счетчика тактов
stopWatch.Start();
//Вызов функции последовательного поиска
nom = Function.Posl(textBox1.Text, str);
//Остановка счетчика тактов
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
string elapsedTime = Convert.ToString(ts.Ticks);
//Вывод сообщения с количеством тактов процессора
MessageBox.Show(elapsedTime, "Количество тактов процессора");
//Если строка номеров не пустая
if (nom != "")
{
//Вывод результата поиска
MessageBox.Show("Данный фрагмент встречается с " + nom + "-го номера", "Результат поиска");
//Открываем файл, в котором выполнялся поиск System.Diagnostics.Process.Start(openFileDialog1.FileName);
}
//Вывод сообщения о неудачном поиске
else MessageBox.Show("Данный фрагмент не встречается в тексте", "Результат поиска");
}
//Если выбран алгоритм Рабина-Карпа
if (radioButton2.Checked == true)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
//Вызов функции поиска алгоритмом Рабина
nom = Function.Rabina(textBox1.Text, str);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
string elapsedTime = Convert.ToString(ts.Ticks);
MessageBox.Show(elapsedTime, "Количество тактов процессора");
if (nom != "")
{
MessageBox.Show("Данный фрагмент встречается с " + nom + "-го номера", "Результат поиска"); //Открываем файл, в котором выполнялся поиск System.Diagnostics.Process.Start(openFileDialog1.FileName);
}
else MessageBox.Show("Данный фрагмент не встречается в тексте", "Результат поиска");
}
//Если выбран алгоритм КМП
if (radioButton3.Checked == true)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
//Вызов функции поиска алгоритмом КМП
nom = Function.KMP(textBox1.Text, str);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
string elapsedTime = Convert.ToString(ts.Ticks);
MessageBox.Show(elapsedTime, "Количество тактов процессора");
if (nom != "")
{
MessageBox.Show("Данный фрагмент встречается с " + nom + "-го номера", "Результат поиска"); //Открываем файл, в котором выполнялся поиск System.Diagnostics.Process.Start(openFileDialog1.FileName);
}
else MessageBox.Show("Данный фрагмент не встречается в тексте", "Результат поиска");
}
//Если выбран алгоритм БМ
if (radioButton4.Checked == true)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
//Вызов функции алгоритмом БМ
nom = Convert.ToString(Function.BM(textBox1.Text,str));
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
string elapsedTime = Convert.ToString(ts.Ticks);
MessageBox.Show(elapsedTime,"Количество тактов процессора");
if (nom != "")
{
MessageBox.Show("Данный фрагмент встречается с " + nom + "-го номера", "Результат поиска"); System.Diagnostics.Process.Start(openFileDialog1.FileName);
}
else MessageBox.Show("Данный фрагмент не встречается в тексте", "Результат поиска");
}
}
}
//Включение кнопки "Выполнить поиск", после выбора алгоритма
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
button3.Enabled = true;
}
//Включение кнопки "Выполнить поиск", после выбора алгоритма
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
button3.Enabled = true;
}
//Включение кнопки "Выполнить поиск", после выбора алгоритма
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
button3.Enabled = true;
}
//Включение кнопки "Выполнить поиск", после выбора алгоритма
private void radioButton4_CheckedChanged(object sender, EventArgs e)
{
button3.Enabled = true;
}
}
}
Код библиотеки классов:
System;System.Collections.Generic;System.Linq;System.Text;System.Collections;
Fuction
{
public static class Function
{
//Функция последовательного поиска
public static string Posl(string x, string s)
{
представлена в Приложении А
}
//Вычисление хеш-функции для алгоритма Рабина
public static int Hash(string s)
{
представлена в Приложении Б