Корректор текста, программа на C#
Сегодня я хотел бы рассмотреть с Вами процесс создания такой несложной программы как корректор текста. Писать программу мы будем на языке C#. Корректор текста будет выполнять следующие несложные задачи(мы конечно же не ставим перед ним таких задач как проверка орфографии, для этих целей можете использовать такие сайты как text.ru):
- Программа удалит дублированные пробелы, то есть если в тексте проставлено два или более пробела подряд, то он оставит только один пробел.
- Предложения должны начинаться с большей буквы, соблюдение чего и будет проверять наш корректор. В случае необходимости он будет корректировать текст сам.
- Перед знаками препинания не должен быть пробел.
- После знака препинания должен стоять пробел.
Для своей программы я выбрал довольно простой интерфейс. Тут нет ничего лишнего. В окне имеются два RichTextBox`а, в первый из которых мы будем вводит текст для корректировки. Этот же RichTextBox будет выводить исправленный, откорректированный текст. А вот второй RichTextBox будет выводить сообщения, в которых содержится количество различных исправлений.
Сразу рекомендую установить метод
, чтобы пользователь сразу увидел любые изменения, вносимые в эти блоки. Далее я опишу несколько методов, каждый из которых редактирует те или иные ошибки.
Убираем дублированные(двойные) пробелыЭтот пункт лучше всего выполнить в первую очередь, так как у нас имеются другие пункты связанные с пробелами и выполняя их мы будем знать, что дублированных пробелов уже нет. К тому же этот пункт самый простой. Но чтобы решить его легко нужно немного по-другому сформулировать его тему. Например так: «Нам нужно заменить двойные пробелы на одинарные«. После такой фразы в голову сразу же лезет метод
который идеально подойдет для решения данной задачи. Имеем следующее:
[code language=»csharp»]int och = 0; //считываем количество ошибок string bufer = richTextBox1.Text; //считываем текст для корректировки while (bufer.IndexOf(" ") != -1) //пока в тексте имеются дублированные пробелы richTextBox1.Text = bufer; richTextBox2.Text = richTextBox2.Text + "Исправлено дублированных пробелов — " + Convert.ToString(och) + "\r\n";[/code]
Таким образом решается первый пункт задачи.
Предложения должны начинаться с большой буквыСледующий метод, а для решения каждой подзадачи я рекомендую использовать свой метод, который будет не только проверять начинаются ли предложения с большой буквы, но и будет ставить пробелы между ними. Первым делом нам необходимо будет проверить первый символ:
[code language=»csharp»]int och1=0; //количество ошибок string buf=""; bufer = richTextBox1.Text; if (char.IsLetter(bufer[0]) && char.IsLower(bufer[0])) // если первый символ буквы, притом маленькая else [/code]
Далее мы запустим цикл для проверки всех оставшихся символов, начиная со второго:
[code language=»csharp»]for (int i = 1; i < bufer.Length; i++) [/code]
Вот такой довольно сложный, но действенный алгоритм не только проверит с какой буквы начинается предложение, но и сделает её заглавной при необходимости. Кроме этого данный метод разделит предложения друг от друга пробелом. Так же хочется уточнить, что переменную och1 Вы можете использовать для вывода сообщения об исправленных ошибках.
Удаляем пробелы перед знаками пунктуацииЗнаки препинания, которые отставлены от слов на какое-то расстояние, смотрятся не слишком красиво. Именно поэтому эти пробелы мы сейчас уберем:
[code language=»csharp»]int och2 = 0; string buf = ""; string bufer = richTextBox1.Text; for (int i = 0; i < bufer.Length-1; i++) //мы сначала ищем пробелы, а когда находим, проверяем следующий символ. Поэтому, если обнаружиться что следующего символа нет, мы нарвемся на fatal error. А оно нам надо? buf = buf + bufer[bufer.Length — 1]; // так как мы не проверили последний символ, мы его просто добавляем richTextBox1.Text = buf; richTextBox2.Text = richTextBox2.Text + "Удалено пробелов перед знаками пунктуации — " + Convert.ToString(och2) + "\r\n";[/code]
Таким образом мы убираем все пробелы, которые находятся между символом и знаком препинания.
Вставляем пробел после знака препинанияКакую-то часть этой задачи мы уже решили, но только часть. Поэтому придется проверить текст еще раз. Итак:
[code language=»csharp»]int och3 = 0; string buf = ""; bufer = richTextBox1.Text; for (int i = 0; i < bufer.Length — 1; i++) // ситуация та же, что и выше. Мы сначала ищем знак препинания, потом проверяем следующий знак buf = buf + bufer[bufer.Length — 1]; //та же ситуация, что и выше richTextBox1.Text = buf; richTextBox2.Text = richTextBox2.Text + "Вставлено пробелов после знаков пунктуаций — " + Convert.ToString(och3) + "\r\n"; och3 = 0;[/code]
Вот этом моменте работа нашей программы заканчивается. Соединив все эти отрывки в одну программу и проработав оставшиеся детали, Вы получите хороший корректор текста.