Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
2 / 2 / 2
Регистрация: 03.03.2013
Сообщений: 104

Программа для подсчета частоты вхождения слов в тексте

07.04.2016, 14:30. Показов 1405. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Собрал приложение для подсчета количества слов из текста.

Но возникла проблема, когда я нажимаю кнопку Загрузить текст:
C++
1
2
3
4
5
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
             System::IO::StreamReader ^sr1 = gcnew System::IO::StreamReader("file.txt", System::Text::Encoding::Default);
             String ^ wrd1 = sr1->ReadToEnd();
             richTextBox1->Text = wrd1;
}
То тогда при нажатии на Посчитать количество слов второй richTextBox2 остается пустым.
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
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
                 map<string, size_t> words;
                 string w;
                 fstream file("file.txt"), out_file("out_file.txt", fstream::out);
                 int it = file.get();//извлекает из входного потока один символ и возвращает его целочисленный код
                 while (it != EOF) {
                     while (it != EOF && isalpha_rus(it)) {
                         w.push_back(it); // Добавление элемента в конец 
                         it = file.get();
                     }
                     while (it != EOF  && !isalpha_rus(it = file.get()));
                     if (!w.empty())
                         ++words[w];
                     w.clear();
                 }
                 file.close();
                 if (!words.empty())
                 for (auto &_pair : words)//диапазонный оператор (серийный). Справа диапазон, слева переменная, 
                     //копия элемента диапазона с инициализацией по значению, & создает инициализацию по ссылке.
                     out_file << _pair.first << " = " << _pair.second << endl;
                 out_file.close();
                 System::IO::StreamReader ^sr2 = gcnew System::IO::StreamReader("out_file.txt", System::Text::Encoding::Default);
                 String ^ wrd2 = sr2->ReadToEnd();
                 richTextBox2->Text = wrd2;
    }
Хотя если сразу нажимать на Посчитать количество слов все выводится как надо. Помогите исправить?
(Сам проект на всякий случай)
Миниатюры
Программа для подсчета частоты вхождения слов в тексте  
Вложения
Тип файла: rar WinRAR archive.rar (1.01 Мб, 2 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.04.2016, 14:30
Ответы с готовыми решениями:

Программа для подсчета частоты вхождения слов
Доброго времени суток. Переделать консольное приложение: map&lt;string, size_t&gt; words; string w; fstream file(&quot;file.txt&quot;),...

Программа для подсчета частоты вхождения слов
Доброго времени суток. Недавно помогли &quot;сворганить&quot; програмку для подсчета частоты вхождения слов из текстового файла: #include...

Программа для подсчета частоты вхождения слов
Программа считает частоту вхождений слов, но есть небольшой нюанс. Слова типа (&quot;как-то&quot;) выводит как два отдельных слова, как и...

8
2 / 2 / 2
Регистрация: 03.03.2013
Сообщений: 104
07.04.2016, 15:48  [ТС]
Нашел ошибку: необходимо было закрыть file.txt в button2_Click.
Но есть еще один вопрос, как сделать так, что бы созданные текстовики (к примеру out_file.txt) удалялись после вывода результата в richTextBox2?
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
07.04.2016, 16:52
Цитата Сообщение от Andru1312 Посмотреть сообщение
Но есть еще один вопрос, как сделать так, что бы созданные текстовики (к примеру out_file.txt) удалялись после вывода результата в richTextBox2?
В таком случае вы можете работать со временным файлом:
http://www.daveoncsharp.com/20... in-csharp/
здесь описано для C#, но под C++/CLI перевести не проблема.
удаление(тоже на C#):
https://msdn.microsoft.com/ru-... -snippet-2
0
2 / 2 / 2
Регистрация: 03.03.2013
Сообщений: 104
07.04.2016, 17:36  [ТС]
S_el, Если б была моя воля, я этот C++/CLI даже б не открывал, но увы, условие задания.
А по вопросу: помогла ф-ция DeleteFile(L"out_file1.txt");

И еще один вопрос: можно ли в самой форме указать путь к файлу, и это пусть занести в мои ф-ции? Просто стандартный OpenFileDialog не подходит из-за System string^ (как я его в map "запихаю")?
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
07.04.2016, 17:53
Цитата Сообщение от Andru1312 Посмотреть сообщение
(как я его в map "запихаю")?
Пихайте в map для C++/CLI:
https://msdn.microsoft.com/en-... 98078.aspx
или в Dictionary из .Net:
https://msdn.microsoft.com/ru-... 46599.aspx

Цитата Сообщение от Andru1312 Посмотреть сообщение
И еще один вопрос: можно ли в самой форме указать путь к файлу, и это пусть занести в мои ф-ции?
Почему нет? Но лучше OpenFileDialog.
0
2 / 2 / 2
Регистрация: 03.03.2013
Сообщений: 104
07.04.2016, 18:10  [ТС]
S_el, А вот к примеру как
C++
1
System::Console::Write(" [{0} {1}]", elem->first, elem->second);
вывести в textBox?
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
07.04.2016, 18:17
Andru1312, напишите функцию для преобразования пары в строку и устанавливайте её результат.
0
2 / 2 / 2
Регистрация: 03.03.2013
Сообщений: 104
07.04.2016, 18:38  [ТС]
S_el, Ну смотрите:
Моя ф-ция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
map<string, size_t> words;
    string w;
    fstream file("file.txt"), out_file("out_file.txt", fstream::out), out_file1("out_file1.txt", fstream::out);
    int it = file.get();//извлекает из входного потока один символ и возвращает его целочисленный код
    while (it != EOF) {
        while (it != EOF && isalpha_rus(it)) {
            w.push_back(it); // Добавление элемента в конец 
            it = file.get();
        }
        while (it != EOF  && !isalpha_rus(it = file.get()));
        if (!w.empty())
            ++words[w];
        w.clear();
    }
    if (!words.empty())
    for (auto &_pair : words)//диапазонный оператор (серийный). Справа диапазон, слева переменная, 
        //копия элемента диапазона с инициализацией по значению, & создает инициализацию по ссылке.
        out_file << _pair.first << " = " << _pair.second << endl;
    file.close(); out_file.close();
Должна бы ть переписанна следующим образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cliext::map<std::string, size_t> words;
    std::string w;
    std::fstream file("file.txt"), out_file("out_file.txt", fstream::out), out_file1("out_file1.txt", fstream::out);
    int it = file.get();//извлекает из входного потока один символ и возвращает его целочисленный код
    while (it != EOF) {
        while (it != EOF && isalpha_rus(it)) {
            w.push_back(it); // Добавление элемента в конец 
            it = file.get();
        }
        while (it != EOF  && !isalpha_rus(it = file.get()));
        if (!w.empty())
            ++words[w];
        w.clear();
    }
    if (!words.empty())
    for (it = words.begin(); it != words.end(); it++)
    {
        Console::WriteLine("Key: {0:F} Value: {1}", it->first, it->second);
    }
    file.close(); out_file.close();
Ругается на it = words.begin(); it != words.end();
Пишет: 29 IntelliSense: не существует подходящей функции преобразования из "cliext::BidirectionalIterator<cliext::i mpl::tree<cliext::impl::map_traits<std:: string, size_t, false, <error-constant>, <error-constant>>>>" в "int" c:\Users\Andrew_Admin\Documents\Visual Studio 2013\Projects\Проект2\Проект2\MyForm1.cp p 36 12 Проект2
30 IntelliSense: отсутствует оператор "!=", соответствующий этим операндам
типы операндов: int != cliext::BidirectionalIterator<cliext::im pl::tree<cliext::impl::map_traits<std::s tring, size_t, false, <error-constant>, <error-constant>>>> c:\Users\Andrew_Admin\Documents\Visual Studio 2013\Projects\Проект2\Проект2\MyForm1.cp p 36 30 Проект2
В чем ошибка?
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
07.04.2016, 22:16
Цитата Сообщение от Andru1312 Посмотреть сообщение
В чем ошибка?
it у вас типа int.
Цитата Сообщение от Andru1312 Посмотреть сообщение
C++
1
int it = file.get();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.04.2016, 22:16
Помогаю со студенческими работами здесь

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

Программа для подсчета уровня частоты вхождений слов
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;map&gt; #include &lt;fstream&gt; using namespace std; int main() { map...

Программа для подсчета слов в тексте
И так, нужна помощь в написании программы для подсчета слов в тексте. Получилось только написать программу, которая подсчитывает кол-во...

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

Программа для подсчета слов во введенном тексте
Private sub command1_click() Dim x as string X=text1.text Print Len (x) End sub Программа считает все введенное Как...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru