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

Создать программу-счётчик слов (помогите доработать код)

27.12.2015, 14:03. Показов 668. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Эта программа видит на входе "Ма-ма -мыла раму. Рама-, мыла маму. Мама была рамой. А у Саши 0 - шуры муры. А у Шуры нет" а на выходе должно выводится вот это по частоте
а 2
была 1
мама 2
маму 1
муры 1
мыла 2
нет 1
рама 1
рамой 1
раму 1
саши 1
у 2
шуры 2

Сейчас программа удаляет все дефисы и прочие знаки и в итоге получается что слово ма-ма она выводит как ма 2 а мне надо чтобы выводила как мама 2 (2 это количество их в файле)

вот код C++
Заголовочный файл "WordsCounter.h"

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include <iostream>
#include <fstream>
 
using namespace std;
 
class words
{
    string str, word;
    ofstream fout;
    int typeofsort;
    bool flag;
 
 
public:
    void Reading (string input); //Чтение из файла
    void Counting();   //Подсчет слов и сортировка
};
Файлы исходного кода
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "WordsCounter.h"
#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <locale>
#include <stdio.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "russian");
    words TheWords;
    TheWords.Reading("input.txt");
    TheWords.Counting();
    return 0;
}
WordsCounter.cpp

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
#include "WordsCounter.h"
#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <sstream>
#include <cctype>
#include <locale>
#include <algorithm>
#include <list>
#include <iterator>
#include <vector>
#include <cmath>
 
using namespace std;
 
namespace std 
{
    template <typename T, typename U>
    ostream& operator<< (ostream& os, const pair<T, U>& v)
    { return os << v.first <<" "<< v.second; }
 
    bool NewSort(const pair<string, int>& first, const pair<string, int>& second)
    {
        return first.second > second.second;
    }
}
 
 
void words::Reading(string input)
{
    flag=false;
    ifstream fin;
    fin.open(input);
    if (!fin.is_open())
    {
        cout << "Ошибка: файл " <<input <<" не найден!\n";
        system("pause");
        exit(1);
    }
    else
    {
        getline(fin, str);
        flag=true;
    }
    fin.close();
}
 
void words::Counting()
{
    typedef map<string, size_t> WordsMap;
    fout.open("output.txt");
    WordsMap map;
        for (int i = 0; i<str.length(); i++)
        if (str[i] == '.' || str[i] == ',' 
            || str[i] == '?' || str[i] == '1' 
            || str[i] == '!' || str[i] == '0' 
            || str[i] == '-' || str[i] == '9' 
            || str[i] == '2' || str[i] == '9' 
            || str[i] == '3' || str[i] == '4' 
            || str[i] == '5' || str[i] == '6' 
            || str[i] == '7' || str[i] == '8' )
            str[i]=' ';
    transform(str.begin(), str.end(), str.begin(), ::tolower );
    istringstream Flow(str);
    while (Flow >> word)
        ++map[word];
    typedef ostream_iterator<WordsMap::value_type> O;   
    typeofsort=0;
    if (flag==1)
    {
        cout << "Слова успешно считаны.\n";
WrongPoint:
        cout << "Тип сортировки: 1 - по афавиту, 2 - по частоте: ";
        cin >> typeofsort;
    }
    if ((typeofsort!=2)&&(typeofsort!=1))
    {
        cout << "Вы ввели неверное значение! Повторите ввод. \n\n";
        goto WrongPoint;
    }
    if (typeofsort==2)
    {
        vector<pair<string,int> > vec_for_sort(map.begin(),map.end());
        sort(vec_for_sort.begin(), vec_for_sort.end(), NewSort);
        copy(vec_for_sort.begin(), vec_for_sort.end(), O(fout , "\n"));
    }
    if (typeofsort==1)
    {
        copy(map.begin(), map.end(), O(fout , "\n"));
    }
 
}
Добавлено через 13 минут
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.12.2015, 14:03
Ответы с готовыми решениями:

Помогите доработать код.
Задача состоит в следующем: надо создать массив и вставить вместо двух случайных элементов &quot;нули&quot;. После посчитать сумму...

Атоморфные числа, С++, помогите доработать код
Сама задача выглядит так: среди чисел от 1 до n найти все атоморфные числа ( т.е. числа которые при возведении их в квадрат совпадают с...

Массив. Помогите доработать код, подскажите где ошибки.
Сама задача проста: Есть массив, состоящий из натуральных чисел, поделенный на 4 части, необходимо переставить блоки ( верхний правый с...

2
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
27.12.2015, 14:34
это можно переписать
C++
1
2
3
4
5
6
7
8
9
if (str[i] == '.' || str[i] == ',' 
            || str[i] == '?' || str[i] == '1' 
            || str[i] == '!' || str[i] == '0' 
            || str[i] == '-' || str[i] == '9' 
            || str[i] == '2' || str[i] == '9' 
            || str[i] == '3' || str[i] == '4' 
            || str[i] == '5' || str[i] == '6' 
            || str[i] == '7' || str[i] == '8' )
            str[i]=' ';
вот так
C++
1
2
3
4
if (str[i] == '.' || str[i] == ',' 
            || str[i] == '?' || str[i] == '!'
            || (str[i]>='0' && str[i] <='9'))
            str[i] = ' ';
или так
C++
1
2
3
4
5
        if (!((str[i] >= 'A' && str[i] <= 'Z') 
            || (str[i] >= 'a' && str[i] <= 'z')
            || (str[i] >= 'А' && str[i] <= 'п')
            || (str[i] >= 'р' && str[i] <= 'я')))
            str[i] = ' ';
как вариант, тире можно не заменять пробелами, а просто удалять, тогда все слова будут отделены пробелами, а слова как "ма-ма", "па-па", будут записаны, как "мама" и "папа"
1
0 / 0 / 0
Регистрация: 19.03.2014
Сообщений: 12
27.12.2015, 15:13  [ТС]
сейчас попробую

Добавлено через 19 минут
Apostol584, блин че я сам допетрить не мог!))) все терь работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.12.2015, 15:13
Помогаю со студенческими работами здесь

Помогите доработать код! СРОЧНО!
Нужно было создать сайт, в котором должно содержаться 1. Гиперссылки 2. Таблицы 3. Списки 4. Графические объекты 5. Таблицы...

Помогите доработать программу.
Помогите пожалуйста. У меня имеется написанный код программы, считает верно. Осталось несколько моментов, которые я не могу решить. ...

Помогите доработать программу
Нужно было написать программу &quot;Угадай число&quot;. Суть в том что прога загадывает число от 0 до 9, а пользователь должен его угадать, причём за...

Помогите доработать программу в Pascal
Люди...помогите пожалуйста с паскаль..мне срочно нужно..( Нужно вот эту программу сделать так чтобы не просто одним нажатием лесенка...

Помогите доработать программу калькулятора на c#
-//-Все работает,только нужно,чтобы работали кнопочки &quot;(&quot; и &quot;)&quot; На макете калькулятора они есть..-//- using System; using...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru