Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
7 / 4 / 0
Регистрация: 21.02.2018
Сообщений: 153
1

Подсчет числа слов в текстовом файле

11.10.2018, 09:33. Просмотров 2868. Ответов 24
Метки нет (Все метки)


Доброго времени суток. подстажите пожалуйста как можно подсчитать слова в тексте? для подсчета символов использую READ() функцию и потом сам написал другую, которой передается считаный символ в виде char и проверяется.
Так же хочу написать проверку для выявления слова, но пробел, запятая или т.д знаки почему то не работаю. может подскажите как можно сделать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2018, 09:33
Ответы с готовыми решениями:

Подсчёт повторяющихся слов в выбранном текстовом файле
Здравствуйте уважаемые форумчане. Помоги чайнику в решении задачи. Необходимо написать код...

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

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

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

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы С#-разработчиков‌
24
5 / 4 / 1
Регистрация: 04.09.2018
Сообщений: 38
11.10.2018, 09:37 2
А можете пример кода скинуть?
0
7 / 4 / 0
Регистрация: 21.02.2018
Сообщений: 153
11.10.2018, 09:45  [ТС] 3
Цитата Сообщение от dytell Посмотреть сообщение
А можете пример кода скинуть?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private static bool FindWord(char x)
        {
 
            if (x == ' ' || x == ',' || x == '.' || x == '!' || x == '?' ||x == ':')
            {
 
                return true;
 
            }
 
            return false;
 
        }
А вот это вызов.
C#
1
2
3
4
5
6
7
8
9
10
while (!reader.EndOfStream)
            {
                var oneWord = (char)reader.Read();
                bool numberOfWord = FindWord(oneWord);
                if (numberOfWord)
                {
                  j++;
                }
                
             }
0
294 / 123 / 106
Регистрация: 30.10.2015
Сообщений: 690
11.10.2018, 09:47 4
Цитата Сообщение от Гиоргий Посмотреть сообщение
как можно подсчитать слова в тексте?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.IO;
using System.Linq;
 
namespace ConsoleApplication
{
  class Program
  {
    static void Main(string[] args)
    {
      var words = File.ReadAllText("file.txt")
        .Split(" ,.!?';:\"\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
        .Where(x => !x.Any(Char.IsDigit));
 
      Console.WriteLine(words.Count());
      Console.ReadLine();
    }
  }
}
0
177 / 151 / 31
Регистрация: 28.09.2018
Сообщений: 204
11.10.2018, 09:49 5
Гиоргий, есть замечательная функция char.IsLetter(), лучше проверять с помощью неё чем как у вас с кучей условий
1
7 / 4 / 0
Регистрация: 21.02.2018
Сообщений: 153
11.10.2018, 09:52  [ТС] 6
Цитата Сообщение от griffon88 Посмотреть сообщение
Гиоргий, есть замечательная функция char.IsLetter(), лучше проверять с помощью неё чем как у вас с кучей условий
я знаю что она есть, но условие не использовать встроенные библиотеки. вот в чемзагвоздка. самим надо написать
0
800 / 549 / 237
Регистрация: 01.07.2018
Сообщений: 1,810
11.10.2018, 10:01 7
Цитата Сообщение от Гиоргий Посмотреть сообщение
но условие не использовать встроенные библиотеки
Когда в консоль выводить кол-во символов нужно будет, то же свою библиотеку писать станете ?
0
5 / 4 / 1
Регистрация: 04.09.2018
Сообщений: 38
11.10.2018, 10:12 8
Ну это лабораторная работа такая у человека

Добавлено через 9 минут
Попробуйте посмотреть
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private static bool FindWord([B]char x[/B])
        {
 
            if (x == ' ' || x == ',' || x == '.' || x == '!' || x == '?' ||x == ':')
            {
 
                return true;
 
            }
 
            return false;
 
        }
в этом коде что какое значение у вас принимает X
0
7 / 4 / 0
Регистрация: 21.02.2018
Сообщений: 153
11.10.2018, 10:24  [ТС] 9
Цитата Сообщение от dytell Посмотреть сообщение
Попробуйте посмотреть
я сейчас это посмотрю.у меня проблема такая ,мой код работает верно если одно предложение одной строкой. а воткогда уже несколько строк но не верно считывает

Добавлено через 2 минуты
Цитата Сообщение от dytell Посмотреть сообщение
FindWord(char x)
а B это что? не принимает у меня
0
177 / 151 / 31
Регистрация: 28.09.2018
Сообщений: 204
11.10.2018, 10:25 10
Гиоргий, строки разделяются символом '\n'

попробуйте так:
if (x == ' ' || x == ',' || x == '.' || x == '!' || x == '?' || x == ':' || x == '\n')
1
5 / 4 / 1
Регистрация: 04.09.2018
Сообщений: 38
11.10.2018, 10:26 11
B это я случайно написал
0
177 / 151 / 31
Регистрация: 28.09.2018
Сообщений: 204
11.10.2018, 10:26 12
но всё равно не поможет, так как изначально считать слова подсчитывая небуквенные символы это плохая идея.

например ваш алгоритм в такой строке ".................................два слова......................." насчитает очень много слов (а именно 57)
1
5 / 4 / 1
Регистрация: 04.09.2018
Сообщений: 38
11.10.2018, 10:28 13
griffon88 красава.

Добавлено через 57 секунд
Тогда нужно делать проверку предыдущего символа
0
7 / 4 / 0
Регистрация: 21.02.2018
Сообщений: 153
11.10.2018, 10:29  [ТС] 14
Цитата Сообщение от griffon88 Посмотреть сообщение
но всё равно не поможет, так как изначально считать слова подсчитывая небуквенные символы это плохая идея.
например ваш алгоритм в такой строке ".................................два слова......................." насчитает очень много слов ))
)) я это тоже понимаю, и поэтому написал тут и спросил совета.
0
177 / 151 / 31
Регистрация: 28.09.2018
Сообщений: 204
11.10.2018, 10:39 15
Гиоргий, поэтому делаем наоборот, считаем именно буквенные символы, если встретили небуквенный символ, то проверяем сколько насчитали букв - если больше 0 то увеличиваем счётчик слов.
Это решит проблему с очень многими другими символами которые могут быть в тексте и не являться частью слова (например, кавычки, табуляция \ / []()и т.д.).
2
7 / 4 / 0
Регистрация: 21.02.2018
Сообщений: 153
11.10.2018, 14:53  [ТС] 16
Цитата Сообщение от griffon88 Посмотреть сообщение
Гиоргий, поэтому делаем наоборот, считаем именно буквенные символы, если встретили небуквенный символ, то проверяем сколько насчитали букв - если больше 0 то увеличиваем счётчик слов.
Это решит проблему с очень многими другими символами которые могут быть в тексте и не являться частью слова (например, кавычки, табуляция \ / []()и т.д.).
C#
1
2
3
4
5
6
7
8
private static bool FindWord(char x)
        {
          if (x >= 'A' && x <= 'Z' || x >= 'a' && x <= 'z' )
            {
              return true;
            }
            return false;
         }
написал так, но опять загвоздка, конец строки он вначале считивает как пробел и уже потом как преход на новую строку, и дает лишние числа
0
177 / 151 / 31
Регистрация: 28.09.2018
Сообщений: 204
11.10.2018, 14:58 17
Гиоргий, скинь весь получившийся новый код
1
7 / 4 / 0
Регистрация: 21.02.2018
Сообщений: 153
11.10.2018, 15:06  [ТС] 18
Цитата Сообщение от griffon88 Посмотреть сообщение
Гиоргий, скинь весь получившийся новый код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while (!reader.EndOfStream)
            {
                var oneWord = (char)reader.Read();
                bool numberOfWord = FindWord(oneWord);
                if (numberOfWord)
                {
                  j++;
                }
                else
                {
                    if(j > 0)
                    {
                        k++;
                        i = 0;
                    }
                }
                
             }
 
            Console.WriteLine("Whole number of word: " + k);
от сюда вызывается и возврашает
0
177 / 151 / 31
Регистрация: 28.09.2018
Сообщений: 204
11.10.2018, 15:23 19
Гиоргий,

навскидку вроде всё верно

попробуй вот этот код:
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
        static void Main(string[] args)
        {
            const string test = ".раз.два,три:четыре<пять>шесть?\nсемь!.";
 
            int countWords = 0, countLetters=0;          
 
            for (int i=0; i<test.Length; i++)
            {               
                if (isLetter(test[i]))
                {
                    countLetters++;
                }
                else
                {
                    if (countLetters > 0)
                    {
                        countWords++;
                        countLetters = 0;
                    }
                }
            }
            Console.WriteLine("Количество слов: " + countWords);
            Console.ReadLine();
 
        }
 
        private static bool isLetter(char x)
        {
            if (x >= 'a' && x <= 'z')
            {
                return true;
            }
 
            if (x >= 'A' && x <= 'Z')
            {
                return true;
            }
 
            if (x >= 'а' && x <= 'я')
            {
                return true;
            }
            if(x >= 'А' && x <= 'Я')
            {
                return true;
            }            
            return false;
        }
    }
2
Модератор
9019 / 6321 / 1766
Регистрация: 21.04.2018
Сообщений: 18,722
Записей в блоге: 2
11.10.2018, 15:37 20
Лучший ответ Сообщение было отмечено Гиоргий как решение

Решение

Цитата Сообщение от Гиоргий Посмотреть сообщение
как можно подсчитать слова в тексте?
Дёшево и сердито:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            bool Пред = false;
            int j = 0;
            while (!reader.EndOfStream)
            {
                char oneWord = (char)reader.Read();
                bool numberOfWord = ЭтоБуква(oneWord);
                if (!Пред && numberOfWord)
                {
                    j++;
                }
                Пред = numberOfWord;
            }
 
 
            bool ЭтоБуква(char Символ)
            {
                if (Символ >= 'a' && Символ <= 'z') return true;
                if (Символ >= 'A' && Символ <= 'Z') return true;
                if (Символ >= 'А' && Символ <= 'Я') return true;
                if (Символ >= 'а' && Символ <= 'я') return true;
                if (Символ = 'ё' || Символ = 'Ё') return true;
                return false;
            }
Добавлено через 3 минуты
Логический критерий начала нового слова - текущий символ буква, а предыдущий не буква.
4
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2018, 15:37

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

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

Подсчет слов в текстовом файле
кaк пoдсчитaт скoлкo нaпример: слoв 'windows' встречaются в теxтoвoм фaиле пoд нaзвaнием 'data.тxт '

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

Подсчет количества слов в текстовом файле
Подсчет количества слов в текстовом файле, содержащем целые числа и слова русского и английского...

Подсчет количества слов в текстовом файле
Добрый день! Помогите пожалуйста написать Батник: Подсчет количества слов в текстовом файле,...

Подсчет количства слов в текстовом файле
Если кого-то не затруднит написание этой программы на ассемблере , пожалуйста ответьте тут :)


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

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

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