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

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

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

Натолкните пожалуйста на мысль, как может выглядеть консольное приложение, считающее количество слов, в которых есть определенная буква (допустим "а") в текстовом файле. По идее как-то надо искать требуемую букву и потом пропускать до ближайшего пробела... как это организовать? Или может можно как-то текст разбить на отдельные слова в векторный массив?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2015, 23:40
Ответы с готовыми решениями:

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

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

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

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

3
57 / 50 / 38
Регистрация: 22.01.2015
Сообщений: 176
09.03.2015, 00:58 2
Создаёшь указатель типа FILE* , массив, который будет использоваться, как буфер для одного слова типа char.
Далее открываешь файл с помощью fopen, и в цикле do ... while(!feof(..))fscanf-ом читаешь лексемы из файла (%s) в чаровый буфер, после чего в том же цикле создаёшь цикл for, в котором начальное значение управляющей переменной = 0, условие <strlen(буфер). В этом цикле проверяешь, равняется ли текущая буква текущего слова нужной тебе. Если да -- увеличивай счётчик.
Необходимо подключить string.h и stdio.h.
0
2725 / 1888 / 560
Регистрация: 05.06.2014
Сообщений: 5,504
09.03.2015, 01:51 3
Цитата Сообщение от 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
33 / 33 / 18
Регистрация: 15.05.2013
Сообщений: 236
09.03.2015, 05:54 4
Как раз сегодня реализовывал эту задачу.
На входе файл в 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2015, 05:54

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

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

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

Подсчёт количества слов в данном текстовом файле
Задание такое: определить количество слов в данном текстовом файле. Слова - последовательности...


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

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

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