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

Подсчитать количество заданных слов в тексте

12.04.2018, 20:33. Показов 2630. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Данная программа берет из текстового файла текст и ищет в нем слово "что". Но она ищет только первое "что". Никак не могу сделать цикл, чтобы программа искала все "что", которые есть в тексте и выдавала сколько их в тексте. Помогите пожалуйста
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <string>
#include <fstream>
#include <tchar.h>
//---------------------------------------------------------------------------
 
#pragma argsused
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    int k;
    ifstream file("C:/Users/adm/1.txt");
    string s, find;
    char c;
 
    while (!file.eof()){
        file.get(c);
        s.push_back(c);
    }
 
    file.close();
 
    find = "что";
 
    int pos = s.find(find);
 
    if (pos == -1)
        cout << "not finded" << endl;
    else
        cout << "finded" << endl;
 
    system ("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2018, 20:33
Ответы с готовыми решениями:

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

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

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

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

15
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
12.04.2018, 20:53 2
Ghost312, https://ideone.com/MWmzhK

http://en.cppreference.com/w/c... tring/find есть перегрузка которая принимает позицию

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string>
#include <iostream>
int main()
{
    int occurrences = 0;
    std::string::size_type pos = 0;
    std::string s = "что Тест что Тест что";
    std::string target = "что";
    while ((pos = s.find(target, pos)) != std::string::npos) {
        ++occurrences;
        pos += target.length();
    }
    std::cout << occurrences << std::endl;
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 20
12.04.2018, 21:45  [ТС] 3
А если несколько слов в тексте нужно найти? Как это сделать?

Добавлено через 10 минут
_exp10der_, А как найти несколько слов в тексте, а не одно?
0
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
12.04.2018, 21:48 4
Ghost312, сделать несколько проверок, и лучше всего добавить это в функцию
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 20
12.04.2018, 21:50  [ТС] 5
RostikTawer, Я пробовал делать несколько проверок (копировал и вставлял один и тот же код, но для других слов). Выдает ошибку
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
13.04.2018, 08:36 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <regex>
#include <string>
#include <fstream>
#include <iterator>
 
 
int main()
{
    std::ifstream ifs("in.txt");
    if (ifs.is_open())
    {
        std::string str{ std::istreambuf_iterator<char>{ifs.rdbuf()}, {} };
        std::regex reg{"(?:^|[^А-Яа-яЁё])[Чч]то(?:$|[^А-Яа-яЁё])"};
        std::cout << std::distance(std::sregex_iterator{ str.begin(), str.end(), reg }, {}) << std::endl;
    }
    else
    {
        std::cerr << "Unable to open file\n";
    }
}
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 20
13.04.2018, 11:21  [ТС] 7
igorrr37, А куда вписывать слова для поиска?
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
13.04.2018, 11:27 8
добавил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <regex>
#include <string>
#include <fstream>
#include <iterator>
 
 
int main()
{
    std::ifstream ifs("in.txt");
    if (ifs.is_open())
    {
        std::string str{ std::istreambuf_iterator<char>{ifs.rdbuf()},{} }, sw("что");
        std::regex reg{ "(?:^|[^А-Яа-яЁё])" + sw + "(?:$|[^А-Яа-яЁё])" };
        std::cout << std::distance(std::sregex_iterator{ str.begin(), str.end(), reg }, {}) << std::endl;
    }
    else
    {
        std::cerr << "Unable to open file\n";
    }
}
0
307 / 288 / 116
Регистрация: 23.01.2018
Сообщений: 933
13.04.2018, 12:25 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <algorithm>
#include <iostream>
#include <string>
#include <queue>
 
using namespace std;
 
int main()
{
    string s("Your home is a box. Your car is a box on wheels. You drive to work in it. You drive home in it. You sit in your home, staring into a box. It erodes your soul, while the box that is your body inevitably withers... then dies. Whereupon it is placed in the ultimate box, to slowly decompose.");
    string w("box");
    int occurences = 0;
    deque<char> q;
    for (char ch : s) {
        q.push_back(ch);
        if (q.size() == w.size()) {
            if (equal(begin(q), end(q), begin(w))) ++occurences;
            q.pop_front();
        }
    }
    cout << occurences << endl;
    return 0;
}
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 20
13.04.2018, 17:24  [ТС] 10
Цитата Сообщение от Вадим Тукаев Посмотреть сообщение
for (char ch : s) {
Declaration syntax error

Добавлено через 10 минут
Цитата Сообщение от igorrr37 Посмотреть сообщение
std::string str{ std::istreambuf_iterator<char>{ifs.rdbuf()},{} }, sw("что");
Improper use of typedef 'string'
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
13.04.2018, 17:33 11
Компилятор старый. Поставь себе codeblocks 17.12
https://sourceforge.net/projec... e/download
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 20
13.04.2018, 17:48  [ТС] 12
igorrr37, я не могу поставить новый компилятор в компьютерном классе

Добавлено через 4 минуты
igorrr37,
Скажи пожалуйста, почему первое слово нормально находит и выводит сколько раз оно в тексте встречается, а второе слово пишет, что нашло 0 раз, хотя оно в тексте есть. Что не так? Я думаю, что из первого цикла просто не выходит, ставил брейк и тогда 2 слово находило нормально, но первое слово нашло только 1 раз, а его в тексте больше чем 1. Как сделать чтобы оно НОРМАЛЬНО работало и все слова находило? Помоги пожалуйста. Еще и setlocale(LC_ALL, "Russian") почему-то не работает, в терминале все равно русские буквы как иероглифы отображаются...
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <string>
#include <fstream>
#include <tchar.h>
//---------------------------------------------------------------------------
 
#pragma argsused
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    int k, v=0, na=0;
    ifstream file("C:/Users/adm/1.txt");
    string s, find;
    char c;
 
    while (!file.eof()){
        file.get(c);
        s.push_back(c);
    }
 
    file.close();
 
    string::size_type pos = 0;
    string target = "в";
    while ((pos = s.find(target, pos)) != string::npos) {
        ++v;
        pos += target.length();
    }
    cout << "V texte naideno " << v << " slyjebnih slov " << target << endl;
 
    string target1 = "что";
    while ((pos = s.find(target1, pos)) != string::npos) {
        ++na;
        pos += target1.length();
    }
    cout << "V texte naideno " << na << " slyjebnih slov " << target1 << endl;
 
 
    system ("pause");
    return 0;
}
//---------------------------------------------------------------------------
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
13.04.2018, 17:55 13
Лучший ответ Сообщение было отмечено Ghost312 как решение

Решение

добавь pos = 0; в строку 35
1
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 20
13.04.2018, 17:56  [ТС] 14
igorrr37, спасибо, ты мой герой
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
13.04.2018, 18:35 15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
#include <iterator>
 
int main()
{
    static const std::string filename{"ip.txt"};
    std::ifstream file{filename,std::ios_base::in};
    
    if(file.is_open())
    {
        std::cout<<distance(std::istream_iterator<std::string>{file}, std::istream_iterator<std::string>{})<<std::endl;
    } 
    else std::cerr<<"Error";
    
}
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 20
13.04.2018, 18:43  [ТС] 16
Peoples, ничего не понятно, если честно. Особенно 14-ая строка
0
13.04.2018, 18:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2018, 18:43
Помогаю со студенческими работами здесь

Подсчитать количество слов в тексте
Дан текст, слова в котором разделены хотя бы одним пробелом. Подсчитать количество слов в тексте

Подсчитать количество слов в тексте;
Подсчитать количество слов в тексте; проверить , есть ли в есть заданное слово ; поменять...

Подсчитать количество слов во введенном тексте
Подсчитать количество слов во введенном тексте. Обрабатываемый текст программа считывает из файла.

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru