Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 20
1

Подсчёт знаков пунктуации в текстовом файле

12.12.2010, 23:48. Показов 3240. Ответов 10
Метки нет (Все метки)

Приветствую!

Друзья, помогите пожалуйста с такой задачей: "Написать программу, которая считывает текст из файла и выводит на экран предложения, содержащие максимальное количество знаков пунктуации."

Заранее благодарю!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2010, 23:48
Ответы с готовыми решениями:

Подсчет суммы чисел в текстовом файле
Допустим, содержание текстового файла: Иванов Иван 4391-21 Вариант 1 2 0 5 0 2 12 1

Подсчет числа слов в текстовом файле
Доброго времени суток. подстажите пожалуйста как можно подсчитать слова в тексте? для подсчета...

Написать программу: подсчет количества знаков пунктуации в строке введенной с клавиатуры
Написать программу, которая подсчитывает количество знаков пунктуации в строке введенной с...

Определить число знаков препинания в текстовом файле
Доброго времени суток! Дан текстовый файл, определить число знаков препинания, используемых в...

10
13 / 13 / 0
Регистрация: 26.01.2010
Сообщений: 96
15.12.2010, 20:10 2
Я честно говоря ни разу еще не работал с текстом, так что решение мое корявое. Не работает для русского текста, т.к. я пока не знаю как исправить кодировку. И еще я принял за истину утверждение что предложение кончается когда ставится точка(т.е. не учитывал вопросительные знаки и т.д.)
В общем работает, но могло бы быть и получше и покрасивее.
В самом верху дописать
C#
1
using System.IO;
Потом в тело Main вставляем
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//выбираем файл -------------------------------------
            string FileName;
            Console.Write("Введите путь к файлу: ");
            FileName = Console.ReadLine(); 
            // считываем его ------------------------------------
            FileStream myFileStream; 
            myFileStream = new FileStream(FileName, FileMode.Open, FileAccess.Read);
            StreamReader myStreamReader;
            myStreamReader = new StreamReader(myFileStream);
            string myText;
            myText = myStreamReader.ReadToEnd();
            // Выделяем каждое предложение в отдельное-----------
            string[] myLineText;
            myLineText = myText.Split('.');
            //анализируем каждое предложение---------------------
            char[] myCharMass;
            int maxPunkt=0, Punkt, mostPunkt = 0;
            for (int i = 0; i < myLineText.Length ; i++)
            {
                //переведем всю строку в символьный массив и отдельно проверим каждый символ.
                myCharMass = myLineText[i].ToCharArray();
                Punkt = 0;
                for (int q = 0; q < myCharMass.Length; q++) 
                {
                    if (char.IsPunctuation(myCharMass[q])) Punkt++;
                }
                if (Punkt > maxPunkt) 
                {
                    maxPunkt = Punkt;
                    mostPunkt = i;
                }
            }
            // вывод 
            Console.WriteLine("Предложение с самым большим кол-вом знаков пунктуации ({0}), это предложение номер {1}:", maxPunkt, mostPunkt);
            Console.WriteLine(myLineText[mostPunkt]);
            Console.ReadLine();
Добавлено через 6 часов 12 минут
тут случайно решил проблему с кодировкой. = )
в 9ую строку нужно добавить encoding.defoult таким образом:
C#
1
myStreamReader = new StreamReader(myFileStream, Encoding.Default);
Добавлено через 4 минуты
все же остается тогда вопрос про предложения заканчивающиеся восклицательным и вопросительными знаками. и многоточиями.
0
13 / 13 / 0
Регистрация: 26.01.2010
Сообщений: 96
16.12.2010, 23:36 3
Решил проблему с восклицательными и вопросительными знаками, полный код программы(конкретно исправления ниже):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            
            //выбираем файл -------------------------------------
            string FileName;
            Console.Write("Введите путь к файлу: ");
            FileName = Console.ReadLine(); 
            // считываем его ------------------------------------
            FileStream myFileStream; 
            myFileStream = new FileStream(FileName, FileMode.Open, FileAccess.Read);
            StreamReader myStreamReader;
            myStreamReader = new StreamReader(myFileStream, Encoding.Default);
            string myText;
            myText = myStreamReader.ReadToEnd();
            // Выделяем каждое предложение в отдельное-----------
            string[] myLineText;
            char[] Delimiters = new char[] {'.', '?', '!'};
            myLineText = myText.Split(Delimiters);
            //анализируем каждое предложение---------------------
            char[] myCharMass;
            int maxPunkt=0, Punkt, mostPunkt = 0;
            for (int i = 0; i < myLineText.Length ; i++)
            {
                //переведем всю строку в символьный массив и отдельно проверим каждый символ.
                myCharMass = myLineText[i].ToCharArray();
                Punkt = 0;
                for (int q = 0; q < myCharMass.Length; q++) 
                {
                    if (char.IsPunctuation(myCharMass[q])) Punkt++;
                }
                if (Punkt > maxPunkt) 
                {
                    maxPunkt = Punkt;
                    mostPunkt = i;
                }
            }
            // вывод 
            Console.WriteLine("Предложение с самым большим кол-вом знаков пунктуации ({0}), это предложение номер {1}:", maxPunkt, mostPunkt);
            Console.WriteLine(myLineText[mostPunkt]);
            Console.ReadLine();
        }
    }
}
Создал массив знаков
C#
1
 char[] Delimiters = new char[] {'.', '?', '!'};
и вставил его вместо myLineText = myText.Split('.'); получилось myLineText = myText.Split(Delimiters); теперь разделителями являются все три знака.
2
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 20
17.12.2010, 22:17  [ТС] 4
Спасибо большое! Так держать!)
0
13 / 13 / 0
Регистрация: 26.01.2010
Сообщений: 96
18.12.2010, 01:44 5
Grouft, не за что = )
0
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 39
25.03.2012, 13:58 6
Можете помочь написать это же задание в Windows form
0
13 / 13 / 0
Регистрация: 26.01.2010
Сообщений: 96
25.03.2012, 14:28 7
В чем сложность с винформс? операции над текстом проделываете те же что и тут.
0
765 / 545 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
25.03.2012, 16:11 8
Neftedollar, в своем коде вы подключаете Linq, но его не используете,он нужен для этого
C#
1
2
3
4
5
6
7
8
9
 private void button1_Click(object sender, EventArgs e)
        {
            using (StreamReader sr = new StreamReader("777.txt"))
            {
               string[] sentense =  sr.ReadToEnd().Split(new Char[]{'.','?','!'},StringSplitOptions.RemoveEmptyEntries);
               this.Text = sentense.First(c => c.Where(n => Char.IsPunctuation(n)).Count() 
               == sentense.Max(b => b.Where(n => Char.IsPunctuation(n)).Count()));
            }  
        }
0
13 / 13 / 0
Регистрация: 26.01.2010
Сообщений: 96
25.03.2012, 16:20 9
Цитата Сообщение от Vitall Посмотреть сообщение
Neftedollar, в своем коде вы подключаете Linq, но его не используете,он нужен для этого
C#
1
2
3
4
5
6
7
8
9
 private void button1_Click(object sender, EventArgs e)
        {
            using (StreamReader sr = new StreamReader("777.txt"))
            {
               string[] sentense =  sr.ReadToEnd().Split(new Char[]{'.','?','!'},StringSplitOptions.RemoveEmptyEntries);
               this.Text = sentense.First(c => c.Where(n => Char.IsPunctuation(n)).Count() 
               == sentense.Max(b => b.Where(n => Char.IsPunctuation(n)).Count()));
            }  
        }
linq подключается автоматически в VS.
Удалять лень.
А тогда я не только не знал что такое linq но и банальной лямбда функции не знал.

Так да. Гораздо изящнее. )
0
765 / 545 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
25.03.2012, 16:28 10
Мой вариант не ахти ,так как в нем выполняется два раз почти идентичные записи, для подсчета знаков пунктуации и для поиска предложения с их максимальным числом

Не по теме:

Блин, а я и не заметил что это тема древняя

О_о
0
13 / 13 / 0
Регистрация: 26.01.2010
Сообщений: 96
25.03.2012, 17:55 11
Цитата Сообщение от Vitall Посмотреть сообщение
Мой вариант не ахти ,так как в нем выполняется два раз почти идентичные записи, для подсчета знаков пунктуации и для поиска предложения с их максимальным числом

Не по теме:

Блин, а я и не заметил что это тема древняя

О_о
В любом случае, последний вариант в этой теме для 3.5 и 4 версий, изящнее чем описанные выше.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2012, 17:55

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Вычислить количество знаков препинания в текстовом файле
Помогите, эту тему вообще не знаю, как с ней работать. Нужно вычислить количество знаков препинания...

Подсчитать количество знаков препинания в текстовом файле
Текст считывается из файла Private Sub Command1_Click() Picture1.Cls Open File1.Path + &quot;\&quot; +...

Подсчет знаков в файле word
Друзья, поставлена такая задача: Из формы в аксе по кнопке в диалоговом окне указывается путь к...

Во входном текстовом файле избавиться от всех разделительных знаков
Написать программу в Pascal.Во входном текстовом файле избавиться от всех разделительных знаков.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.