Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
4 / 4 / 1
Регистрация: 17.02.2015
Сообщений: 64

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

08.03.2015, 23:40. Показов 1504. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Натолкните пожалуйста на мысль, как может выглядеть консольное приложение, считающее количество слов, в которых есть определенная буква (допустим "а") в текстовом файле. По идее как-то надо искать требуемую букву и потом пропускать до ближайшего пробела... как это организовать? Или может можно как-то текст разбить на отдельные слова в векторный массив?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.03.2015, 23:40
Ответы с готовыми решениями:

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

Замена слов в текстовом файле
Нужна помощь, как в текстовом файле изменить слово, например, "Black" на "White"?

Количество слов в текстовом файле
Здравствуйте. Допустим у меня есть текстовый файл, в котором нужно посчитать количество слов, как это можно реализовать?

3
 Аватар для Tordek
58 / 51 / 38
Регистрация: 22.01.2015
Сообщений: 176
09.03.2015, 00:58
Создаёшь указатель типа FILE* , массив, который будет использоваться, как буфер для одного слова типа char.
Далее открываешь файл с помощью fopen, и в цикле do ... while(!feof(..))fscanf-ом читаешь лексемы из файла (%s) в чаровый буфер, после чего в том же цикле создаёшь цикл for, в котором начальное значение управляющей переменной = 0, условие <strlen(буфер). В этом цикле проверяешь, равняется ли текущая буква текущего слова нужной тебе. Если да -- увеличивай счётчик.
Необходимо подключить string.h и stdio.h.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
09.03.2015, 01:51
Цитата Сообщение от IT_Beginner Посмотреть сообщение
По идее как-то надо искать требуемую букву и потом пропускать до ближайшего пробела... как это организовать?
Тоже ходили на курсы C++, где учили программировать на C?
C++
1
2
3
4
std::ifstream stream("text.txt"};
for(std::string word;stream>>word;)
    if(word.find("a")!=std::string::npos)
        cout<<word<<endl;
1
 Аватар для Kant
37 / 37 / 18
Регистрация: 15.05.2013
Сообщений: 236
09.03.2015, 05:54
Как раз сегодня реализовывал эту задачу.
На входе файл в ASCII, на выходе файл слово/кол-во встреч. слов.

Немного изучаю С++11. Может испугает новичка. Для бывалых хотелось бы услышать критику.

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <iostream>
#include <fstream>
#include <regex>
#include <ctime>
 
#include <map>
 
using namespace std;
 
typedef sregex_token_iterator rti;
typedef pair<string, long long> word_numb;
 
map<string, long long> split(const string& str, const string& delimiters);
vector<word_numb> numberOfIdenticalWords(const string& str);
 
long long substr_count_word(const string& haystack, const string& needle);
 
 
int main(int argc, char *argv[])
{
    string DIR = "D:\\1.txt";
    ifstream fin(DIR);
 
    string s;
    fin.seekg(0, ios::end);
    size_t size = fin.tellg();
 
    s.reserve(size);
    fin.seekg(0, ios::beg);
 
    s.assign((istreambuf_iterator<char>(fin)),
             istreambuf_iterator<char>());
 
    string str = s;
//    str.resize(s.size()*5000);
//    for(int i=0; i<5000; ++i) str += s;
 
    cout << "memory = " << (str.size()/sizeof(char))/1048576 << endl;
 
    size_t start_time = clock();
    vector<word_numb> wn = numberOfIdenticalWords(str);
    size_t end_time = clock();
 
    size_t duration = end_time - start_time;
    cout << "duration msec = " << duration << endl;
 
    /* upd reg
     * memory = 272 mb
     * regex time = 1
     * map time = 133 259
     * sort(vec) time = 1
     *
     * duration time = 133 261
    */
 
 
    /* upd split
     * memory = 272 mb
     * map time = 13 878
     * sort(vec) time = 1
     * duration time = 13 879
     *
     * 133 261 / 13 879 = ~9.6
    */
 
    ofstream fout("D:\\number_of_identical_words.txt");
    for(auto i : wn)
        fout << i.first << " " << i.second << endl;
 
    cout << "\nI finished.\n";
 
    return 0;
}
 
 
map<string, long long> split(const string& str, const string& delimiters) {
    size_t lastPos = str.find_first_not_of(delimiters, 0);
    size_t pos = str.find_first_of(delimiters, lastPos);
 
    map<string, long long> tokens;
    while (string::npos != pos || string::npos != lastPos) {
        string token = str.substr(lastPos, pos - lastPos);
        tokens[token]++;
        lastPos = str.find_first_not_of(delimiters, pos);
        pos = str.find_first_of(delimiters, lastPos);
    }
 
    return tokens;
}
 
 
vector<word_numb> numberOfIdenticalWords(const string& str) {
//    size_t tre0 = clock();
//    vector<string> tokens;
//    std::regex re(R"([\s-,.;:!?\"]+)");
//    rti begin(str.begin(), str.end(), re, -1), end;
//    size_t tre1 = clock();
//    cout << "regex time = " << tre1 - tre0 << endl;
 
//    size_t map0 = clock();
//    map<string, long long> words;
//    while (begin!=end) words[*begin++]++;
//    size_t map1 = clock();
//    cout << "map time = " << map1 - map0 << endl;
 
    size_t map0 = clock();
    map<string,long long> words = split(str, " -,.;:!?\r\n\"");
    size_t map1 = clock();
    cout << "map time = " << map1 - map0 << endl;
 
    size_t vec_words0 = clock();
    vector<word_numb> vec_words(words.begin(), words.end());
    sort(vec_words.begin(), vec_words.end(),
         [](const word_numb& a, const word_numb& b)->bool {
        return a.second > b.second;
    });
    size_t vec_words1 = clock();
    cout << "sort(vec) time = " << vec_words1 - vec_words0 << endl;
 
    return vec_words;
}
 
long long substr_count_word(const string& str, const string& needle) {
    map<string, long long> words = split(str, " -,.;:!?\r\n\"");
    return words[needle];
}
[ATTACH]498387[/ATTACH]
Вложения
Тип файла: txt 1.txt (3.9 Кб, 7 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.03.2015, 05:54
Помогаю со студенческими работами здесь

Подсчитать количество слов в текстовом файле
Написать программу, подсчитывающую количества слов в текстовом файле. P.C. Дайте ответ пожалуйста в rar архиве. Я не очень разбираюсь...

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

Подсчитать количество слов в текстовом файле
дан текстовый файл, подсчитать кол-во слов в файле

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

Подсчёт количества слов в данном текстовом файле
Задание такое: определить количество слов в данном текстовом файле. Слова - последовательности символов и цифр, разделенные &quot;не...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru