Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KrisV
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 36
#1

C++ и STL (раскритикуйте мою первую прогу) - C++

13.04.2010, 11:13. Просмотров 514. Ответов 9
Метки нет (Все метки)

Много всего делал на си а вот на С++ кроме калькулятора в Builder ничего. Вот написал такую прогу, которая анализирут текстовый файл и выдает информацию какое слово сколько раз встречается в тесте.
Принцип следующий - обявляется Dictionary в котором "массив", "индексы" которого это слова, а значения - это как часто они встречаются в тексте. В конце этот "массив" печатается.
Алгоритм вычитан в интернете.

Прога работает. Но, просьба к участникам, посмотреть код и раскритиковать, что где неправильно или неоптимально ...т.е. что где не есть хорошо. Я использовал STL т.к. хотелось посмотреть что это и как с ним работать.
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
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
 
using namespace std;
 
class Pair {
    friend class Dictionary;
public:
    Pair(string str) {index = str, val = 0;};
    void operator++(int) {val++;};
private:
    string index;
    int val;
};
 
typedef vector<Pair>::iterator  it_t;
 
class Dictionary {
public:
    Dictionary() {arr.clear();};
    void print();
    it_t my_find(string index);
    Pair& operator[] (string index);
private:
    vector<Pair>    arr;
};
 
void Dictionary::print()
{
    for (it_t i = arr.begin(); i != arr.end(); i++)
        cout << "Word: " << (*i).index << "\t\t" << (*i).val << endl;
}
 
it_t Dictionary::my_find(string index)
{
    for (it_t i = arr.begin(); i != arr.end(); i++)
        if ((*i).index == index)
            return i;
    return arr.end();
}
 
Pair& Dictionary::operator[] (string index)
{
    it_t i = my_find(index);
 
    if (i != arr.end())
        return *i;
    else {
        Pair *p = new Pair(index);
        arr.push_back(*p);
        delete p;
        return arr.back();
    }
 
};
 
int main() {
    Dictionary dict;
    string word;
 
    ifstream text_file("words.txt", ifstream::in);
    while (text_file.good()) {
        word.clear();
        text_file >> word;
        dict[word]++;
    }
    text_file.close();
    dict.print();
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2010, 11:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос C++ и STL (раскритикуйте мою первую прогу) (C++):

Кому слабо взломать прогу мою? - C++
Просто интересно можно ли ее взломать... Вот файл *.exe вот файл

написал первую прогу в СИ. не запускается.исправьте пож ошибку(и) - C++
#include &lt;math.h&gt; main () { float a,b,c,x,s; cout&lt;&lt;&quot;Введите a,b,c через пробел&quot;; cin&gt;&gt; a,b,c; x=fabs(c-b); ...

Попытка создать первую прогу на языке С++ в Microsoft Visual Studio - C++
Я недавно начала изучать программу Microsoft Visual Studio Ultimate 2010. Изучив основные элементы пытаюсь создать свою первую простенькую...

Запретить программе убивать мою прогу - C#
Здраствуйте! Допустим у меня есть программа killer.exe и программа MY.exe. Как запретить killer.exe закрывать мой процесс MY.exe:...

Запретить программе убивать мою прогу - Windows 7
Здраствуйте! Допустим у меня есть программа killer.exe и my.exe... Я запускаю killer.exe (который отслеживает открывание...

Чтобы другие программы при запуске не залазили на мою прогу - Delphi
Я над таскбаром создал прогу-форму, такой же где-то размер и форма. Эта прога у меня должна быть всегда на виду. Поэтому есть...

9
oxotnik
1597 / 1074 / 34
Регистрация: 21.08.2008
Сообщений: 4,500
Записей в блоге: 1
13.04.2010, 11:21 #2
от STL тут только название
задача решается складыванием в map строк (ключ строка, значение кол-во повторений), и даже алгоритм не надо подключать.
0
ISergey
Maniac
Эксперт С++
1407 / 918 / 57
Регистрация: 02.01.2009
Сообщений: 2,732
Записей в блоге: 1
13.04.2010, 11:37 #3

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
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <map>
 
void out(const std::pair<std::string, int> &rhs){
    std::cout << rhs.first << " : " << rhs.second << std::endl;
}
int main(){
 
    std::map<std::string, int> map;
    std::ifstream file("file.txt");
    std::istream_iterator<std::string> 
        i = std::istream_iterator<std::string>(file), 
        e = std::istream_iterator<std::string>();
    
    for(; i != e; ++i)
        map[*i]++;
    file.close();
 
 
    std::map<std::string, int>::iterator 
        i_m = map.begin(),
        i_e = map.end();
    for(; i_m != i_e; ++i_m)
        out((*i_m));
 
    return 0;
}
0
KrisV
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 36
13.04.2010, 11:42  [ТС] #4
Да, согласен
Я про шаблон map не знал.
Нехороший пример, для работы с классами(цель была такая) я взял.

Гляньте всеж, плиз все ж что я там с классами нахимичал
0
ISergey
Maniac
Эксперт С++
1407 / 918 / 57
Регистрация: 02.01.2009
Сообщений: 2,732
Записей в блоге: 1
13.04.2010, 11:57 #5
Цитата Сообщение от KrisV Посмотреть сообщение
Код
Dictionary() {[B][U]arr.clear();[/U][/B]};
Вектор и так чист.. лишняя операция..
и в этих строках..
Код
Pair(string str) 
it_t my_find(string index);
Pair& operator[] (string index);
так делай..
Код
Pair([U]const string &str[/U]) 
it_t my_find([U]const string &index[/U]);
Pair& operator[] ([U]const string &index[/U]);
0
KrisV
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 36
13.04.2010, 12:10  [ТС] #6
Воспринял, спасиб. Неужели все остальное нормально?)
0
rangerx
1941 / 1550 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
13.04.2010, 13:48 #7
Код
Pair(const string& str) : [U]index(str), val(0)[/U] { };
Код
 for (it_t i = arr.begin(); i != arr.end(); [U]++i[/U])
0
piOMEN
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 20
13.04.2010, 14:40 #8
KrisV, слушай а можешь дать исходник калькулятора ?
0
KrisV
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 36
13.04.2010, 15:02  [ТС] #9
Не калькулятор это лет 5 назад в инсте было)

Добавлено через 2 минуты
Цитата Сообщение от rangerx Посмотреть сообщение
Код
Pair(const string& str) : [U]index(str), val(0)[/U] { };
Код
 for (it_t i = arr.begin(); i != arr.end(); [U]++i[/U])

Спасиб, надо мне привыкать к синтаксису такого присваивания.

А во втором случае в чем разница то?
такой код например печатает одно и то же:
C
1
2
3
4
5
    for (k=0; k!=5; ++k)
        cout<<k;
 
    for (k=0; k!=5; k++)
        cout<<k;
0
rangerx
1941 / 1550 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
13.04.2010, 15:36 #10
Цитата Сообщение от KrisV Посмотреть сообщение
А во втором случае в чем разница то?
На самом деле разница есть
Вопрос про цикл for
1
13.04.2010, 15:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2010, 15:36
Привет! Вот еще темы с ответами:

Оцените, пожалуйста, мою первую программу - текстовый редактор - Visual Basic .NET
Вот написал свою первую программу, хотя не раз ее совершенствовал. В ней, конечно, есть недоработки, но как говорят - совершенству нет...

Почему Авира удаляет всю мою прогу написанное на Делфи... Принимает их за вирусами Win32/Induc.A - Антивирусы
Почему Авира удаляет всю мою прогу написанное на Делфи... Принимает их за вирусами Win32/Induc.A

Как программно проверить, на машине действительно нет инета, или брандмауэр блокирует мою прогу? - C++ Builder
При запуске прога должна забрать с сервера файл. При невозможности сего - некое действие. Сабж.

Уважаемые веб-мастера. Просьба оценить мою первую веб страничку. - HTML, CSS
Самая -самая -самая моя первая веб страничка. Использовал CSS and HTML. Не смотря на то, что я очень старался ее сделать, так и не...


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

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

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