Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Александр1996
0 / 0 / 2
Регистрация: 19.03.2014
Сообщений: 7
#1

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

27.12.2015, 14:03. Просмотров 233. Ответов 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 минут
http://www.cyberforum.ru/cpp-beginners/thread375018.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2015, 14:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Создать программу-счётчик слов (помогите доработать код) (C++):

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

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

Запомнить данные в классе в виде массива слов. Помогите - не код, а совет как сделать.
Здравстуйте! Задание стоит так: Программа должна открыть файл Go.txt и...

Помогите создать программу с событием на с++
Доброе утро всем! Мне всегда помогали на этом форуме и хотела еще раз...

База данных. Помогите доработать сортировку!
Доброе время суток!) Нужна помощь! Создал базу данных. ФИО, число, месяц, год...

2
Apostol584
242 / 148 / 118
Регистрация: 26.11.2012
Сообщений: 375
Завершенные тесты: 2
27.12.2015, 14:34 #2
это можно переписать
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
Александр1996
0 / 0 / 2
Регистрация: 19.03.2014
Сообщений: 7
27.12.2015, 15:13  [ТС] #3
сейчас попробую

Добавлено через 19 минут
Apostol584, блин че я сам допетрить не мог!))) все терь работает
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2015, 15:13
Привет! Вот еще темы с решениями:

Скатерть Улама - помогите доработать прогу :)
Есть код программы, но что-то не могу заставить его работать в Visual Studio...

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

Доработать код ежедневника
В общем есть работа : ежедневник и следующая часть кода: #include...

Доработать код данной программы
Дан код: #include &lt;iostream&gt; using namespace std; static const int N =...


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

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

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