С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 20

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

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

Студворк — интернет-сервис помощи студентам
Данная программа берет из текстового файла текст и ищет в нем слово "что". Но она ищет только первое "что". Никак не могу сделать цикл, чтобы программа искала все "что", которые есть в тексте и выдавала сколько их в тексте. Помогите пожалуйста
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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.04.2018, 20:33
Ответы с готовыми решениями:

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

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

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

15
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
12.04.2018, 20:53
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  [ТС]
А если несколько слов в тексте нужно найти? Как это сделать?

Добавлено через 10 минут
_exp10der_, А как найти несколько слов в тексте, а не одно?
0
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
12.04.2018, 21:48
Ghost312, сделать несколько проверок, и лучше всего добавить это в функцию
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 20
12.04.2018, 21:50  [ТС]
RostikTawer, Я пробовал делать несколько проверок (копировал и вставлял один и тот же код, но для других слов). Выдает ошибку
0
 Аватар для igorrr37
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,743
Записей в блоге: 9
13.04.2018, 08:36
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  [ТС]
igorrr37, А куда вписывать слова для поиска?
0
 Аватар для igorrr37
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,743
Записей в блоге: 9
13.04.2018, 11:27
добавил
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
 Аватар для Вадим Тукаев
309 / 290 / 116
Регистрация: 23.01.2018
Сообщений: 933
13.04.2018, 12:25
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  [ТС]
Цитата Сообщение от Вадим Тукаев Посмотреть сообщение
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
 Аватар для igorrr37
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,743
Записей в блоге: 9
13.04.2018, 17:33
Компилятор старый. Поставь себе codeblocks 17.12
https://sourceforge.net/projec... e/download
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 20
13.04.2018, 17:48  [ТС]
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
 Аватар для igorrr37
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,743
Записей в блоге: 9
13.04.2018, 17:55
Лучший ответ Сообщение было отмечено Ghost312 как решение

Решение

добавь pos = 0; в строку 35
1
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 20
13.04.2018, 17:56  [ТС]
igorrr37, спасибо, ты мой герой
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
13.04.2018, 18:35
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  [ТС]
Peoples, ничего не понятно, если честно. Особенно 14-ая строка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.04.2018, 18:43
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru