0 / 0 / 1
Регистрация: 13.06.2014
Сообщений: 29
1

Подсчёт количества слов в textBox

28.09.2016, 00:11. Показов 4744. Ответов 8
Метки нет (Все метки)

Здравствуйте! Помогите, пожалуйста, решить проблему!
У меня есть textBox, в котором нужно посчитать количество слов введенного текста. Изначально не планировалось, что туда будут ручками вводить, при копировании куска текста всё нормально считается. Но когда начинаешь вводить сам, после первого пробела он начинает каждую букву считать как слово, пробел как два, нажатие Backspace вообще за 4 и т.д.
Мне нужно разбить текст на отдельные слова, поэтому использую стринговый список all_words, в который заношу всё, что считается словами и количеством слов получаю как его Count. Я этот код повесил на событие TextChanged, нужно, чтобы оно при вводе постепенно наращивало список слов.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string text = textBox1.Text;
            if (text == "")
                word_count_label.Text = "0";
            string temp = "";
            for(int i=0; i<text.Length; i++)
            {
                if (alph.Contains(text[i]))
                    temp += text[i];
                else
                {
                    if (temp.Length > 1 || temp == "я")
                    {
                        all_words.Add(temp);
                        temp = "";
                    }
                }
            }
            word_count_label.Text = Convert.ToString(all_words.Count);
        }
Помогите, пожалуйста) на всякий случай прикрепляю архив с проектом.
Вложения
Тип файла: zip Словоформы текста.zip (12.7 Кб, 14 просмотров)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2016, 00:11
Ответы с готовыми решениями:

SameCount(s, n) Подсчёт количества слов в строке, начинающихся и заканчивающихся на одну и ту же букву
Всем привет! Только начал изучать сишарп. Учусь заочно, изучаю самостоятельно. Дали задание:...

Подсчёт количества символов в строке
Доброго времени суток! Хочу написать программу, которая будет отображать количество одинаковых...

Подсчёт количества каждого символа в строке
Программа подсчитывает сколько каких символов, хочу сделать чтобы он мне не считал пробел и не...

Подсчёт количества отрицательных элементов в массиве
Составить программу подсчета количества отрицательных (положительных, нулевых, кратных k)...

8
.NET C#,ASP.NET MVC
Эксперт .NET
590 / 501 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
28.09.2016, 00:15 2
Цитата Сообщение от nexus_one Посмотреть сообщение
в котором нужно посчитать количество слов введенного текста.
C#
1
var wordsCount = textBox1.Text.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries).Length;
0
Эксперт .NET
9330 / 6693 / 1081
Регистрация: 21.01.2016
Сообщений: 25,225
28.09.2016, 03:50 3
lvlkoo, без обид, но за советы использовать String.Split для простого подсчёта слов в строке нужно бить по рукам кожаной шпажкой, чтобы неповадно было.

nexus_one, используй простой конечный автомат:

Кликните здесь для просмотра всего текста

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System;
 
namespace NETExperiments
{
    class myClass
    {
        enum WordCountState
        {
            Init,
            Word,
            WhiteSpace
        }
 
        static int CountWords(string originString)
        {
            int wordCounter = 0;
            WordCountState state = WordCountState.Init;
 
            foreach (Char c in originString) {
                // In case of whitespace
                if (Char.IsWhiteSpace(c)) {
                    switch (state) {
                        case WordCountState.Init:
                        case WordCountState.Word:
                            state = WordCountState.WhiteSpace;
                            break;
 
                        case WordCountState.WhiteSpace:
                            // ignore whitespace chars
                            break;
 
                        default:
                            throw new InvalidProgramException();
                    }
                // In case of non-whitespace char
                } else {
                    switch (state) {
                        case WordCountState.Init:
                        case WordCountState.WhiteSpace:
                            // Incerement out counter if we met non-whitespace
                            // char after whitespace (one or more)
                            wordCounter++;
                            state = WordCountState.Word;
                            break;
 
                        case WordCountState.Word:
                            // ignore all symbols in word
                            break;
 
                        default:
                            throw new InvalidProgramException();
                    }
                }
            }
 
            return wordCounter;
        }
 
        static void Main(string[] args)
        {
            string str = "Hello from cyberforum and    have nice  day!";
 
            Console.WriteLine("We have {0} words", CountWords(str));
 
            Console.ReadKey();
        }
    }
}
0
.NET C#,ASP.NET MVC
Эксперт .NET
590 / 501 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
28.09.2016, 08:33 4
Usaga, ну как тут без обид то?
Обоснуйте почему для ПРОСТОГО подсчета слов с использованием string.Split() вы готовы кожаной шапкой размахивать на право и на лево? Чем ваш способ на столько лучше?
0
Эксперт .NET
9330 / 6693 / 1081
Регистрация: 21.01.2016
Сообщений: 25,225
28.09.2016, 09:04 5
Цитата Сообщение от lvlkoo Посмотреть сообщение
кожаной шапкой
"Шпажкой", а не шапкой

String.Split разбивает строку на массив строк (не нужных совершенно), который память занимает, прибавляя работы сборщику мусора. И всё только для того, чтобы просто подсчитать слова в строке. Расточительство чистой воды. А потом начинается "що C# такой тормозной?". Где ж ему быстрым быть, если даже простые вещи через задницу делаются
0
.NET C#,ASP.NET MVC
Эксперт .NET
590 / 501 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
28.09.2016, 09:32 6
Цитата Сообщение от Usaga Посмотреть сообщение
"Шпажкой", а не шапкой
Та без разницы

Цитата Сообщение от Usaga Посмотреть сообщение
String.Split разбивает строку на массив строк (не нужных совершенно), который память занимает.
Вы сильно предвзято относитесь, честное слово. Для текста не на пару миллионов строк пару мегабайт памяти выделенной памяти абсолютно погоды не сделают.

Цитата Сообщение от Usaga Посмотреть сообщение
прибавляя работы сборщику мусора.
Действительно оставим в покое бедный сборщик мусора, он уже смотреть на эти массивы не может

Цитата Сообщение от Usaga Посмотреть сообщение
И всё только для того, чтобы просто подсчитать слова в строке.
Вот именно! Выбор того или иного алгоритма зависит от задачи и обьемов этих задач, а в данном случае над чем заморачиватся? Над выиграшем пару миллисекунд и пары мб памяти? (а ну еще меньше работы уставшему дворнику).

Цитата Сообщение от Usaga Посмотреть сообщение
що C# такой тормозной
Ни где не встречал такого. Может только от каких нибудь студентов-сиплюсплюсников которым в универ рассказали что кроме с++ ничего не существует, и что остальное все уг (нам и менно так и рассказывали в свое время)

Цитата Сообщение от Usaga Посмотреть сообщение
если даже простые вещи через задницу делаются
Ради бога, давайте не будем? Вы наверно еще просто говнокода не видели.
0
26 / 27 / 21
Регистрация: 17.05.2016
Сообщений: 94
28.09.2016, 09:39 7
Цитата Сообщение от Usaga Посмотреть сообщение
nexus_one, используй простой конечный автомат:
Ничего себе "простой") А как же компактность кода? Действительно у lvlkoo отличное решение. Разница в миллисекундах невосприимчива человеческому глазу.
0
bax_tang
28.09.2016, 09:43
  #8

Не по теме:


Правда - она у каждого своя, и с этим ничего не сделаешь.

Другой вопрос, что по-хорошему нужно "с младых ногтей" приучаться к качественному, самодокументируемому и оптимизированному (там, где это действительно нужно!) коду. Чтобы потом не тащить в серьёзные проекты откровенно неэффективные алгоритмы. :)

0
Эксперт .NET
9330 / 6693 / 1081
Регистрация: 21.01.2016
Сообщений: 25,225
28.09.2016, 09:44 9
Народ, не заводитесь Делайте как нравится, только в "продакшн" не пихайте это
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2016, 09:44

Подсчёт количества элементов массива с заданными свойствами
Подсчитать кол-во элементов массива с заданными свойствами

Рекурсивный подсчёт количества разбиений натурального числа
Составить рекурсивную программу-функцию подсчета количества x(m) разбиений натурального числа m, то...

Подсчёт количества круглых скобок в строке с помощью StringBuilder
using System; namespace cyber1 { class Program { static void Main() { ...

Вычисление удвоенных слов и количества слов в заданном элементе
Мальчики, вот такое было задание у меня: нужно из уже заданных слов найти удвоенные слова и...


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

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

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