Форум программистов, компьютерный форум CyberForum.ru

Посмотреть код - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ С-строки. Где храняться? Когда удаляются? http://www.cyberforum.ru/cpp-beginners/thread631807.html
есть, к примеру, такой класс class Hero { private: char * name; public: Hero(char * n = "TORIN")
C++ Что есть причиной ошибки? Здравствуйте. Задача: Функция, принимает в качестве параметров: многозначное целое число, символ – разделитель. Возвращает строку вида: 1*232*233 Вот моё решение: #include <iostream> using namespace std; void Chislo(int, char); void main() { int Dig; http://www.cyberforum.ru/cpp-beginners/thread631795.html
C++ "Анонимные" (временные) объекты?
Пусть имеется класс T: class T { public: int a; int b; T(int _a, int _b) : a(_a), b(_b) {} } Имеется функция void func(T* obj)
Массив объектов класса C++
class abc { public: int x,y; }; abc all; int main() { all.x=5; all.x=6;
C++ Пролетает cin >> http://www.cyberforum.ru/cpp-beginners/thread631775.html
Нужно заполнять вектор пока не введено 'x', потом сложить количество (введенное) первых элементов. После 'x' программа сразу завершается!!! . И еще вопрос как фильтровать ввод cin >> (число) от не числа. Спасибо!!! #include <iostream> #include <vector> using namespace std; int main() { vector<double> stream;
C++ пишем свой троян с нуля Всем привет)))соглашусь, что изобретаю велосипед, но хочется сделать все своими ручками не прибегая к open source и т.п. для повышения своего опыта в программировании на Visual C++ . Хочу, чтобы меня поставили на иснниный путь. Итак, цель - написание трояна, а именно кейлоггера) для получения пароля от vk.com. Погуглил , почитал мануалы парочку часов, узнал основные схемы проникновения троянов на... подробнее

Показать сообщение отдельно
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
01.08.2012, 20:14     Посмотреть код
Приветствую всех
Вот решил написать программу сам, чтобы так скажем закрепить все полученные на сегодняшний день знания по С++ (еще не полностью дочитал книгу Липпмана)
Вот как раз в этой книге надо было сделать проект.

Задача программы в следующем.
/*
* Программа принимает у пользователя путь к файлу.
* Разбирает файл по строкам и словам.
* Пользователь может ввести любое слово и получить данные в виде номеров строк в которых встречается данное слово.
* При желании вывести эти строки или искать другое слово
*/
так вот, прочитав тему по этому проекту честно ничего не понял, т.к. там пишется все сразу и за всем сложно уследить с самого начала. И я решил написать его собственными силами.
С классами я еще знаком слабо(через 1 главу только начнется их изучение) , только то что рассказывалось в общем.

Прошу у кого есть время и желание посмотрите код и скажите может есть что-то, что реализовано "ужасно", только не надо показывать как это можно реализовать более сложными способами, то что я использовал это, то что я прошел по книге.

Заранее благодарен за указание на все мои косяки
PS: Первый раз писал программу содержащую больше 100 строк

файл main.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
/*
* Программа принимает у пользователя путь к файлу. Разбирает файл по строкам и словам.
* Пользователь может ввести любое слово и получить данные в виде номеров строк в которых
* встречается данное слово.
* При желании вывести эти строки.
*/
 
#include <iostream>
#include <fstream>
#include <sstream>
#include <map>
#include <set>
#include <vector>
#include <string>
#include "TextQuery.h"
 
int main() 
{
    //открытие файла
    std::string file_name_str;
    std::ifstream file_f;
    std::cout << "Enter file name and its type(name.type)" << std::endl
            << " -> ";
    std::cin >> file_name_str;
    open_file(file_f, file_name_str);
 
    Quer tq;
    tq.add_line_to_vec(file_f);     // каждую строку в вектор
    //закрытие файла(больше не понадобится)
    file_f.close();
 
    //заполняем карту
    tq.line_to_word_in_map();
    
    // Для искомого слова
    std::string word_for_search;
    //Ввод слова и вывод результатов
    found_and_result(tq, word_for_search);
    std::cout << std::endl;
 
    //Меню
    menu();         
    
    //проверка ответов
    int otv;            //Для принятия ответа
    do {
        std::cin >> otv;
        if (otv == 1) { 
            output_lines(tq, word_for_search);
            std::cout << std::endl;
            menu();
        }
        if (otv == 2) {
            found_and_result(tq, word_for_search);
            std::cout << std::endl;
            menu();
        }
    }while (otv != 0);
 
    return 0;
}

файл TextQuery.h

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
#ifndef TEXTQUERY_H
#define TEXTQUERY_H
 
#include <iostream>
#include <fstream>
#include <sstream>
#include <map>
#include <set>
#include <vector>
#include <string>
 
class Quer {
public:
    typedef std::vector<std::string>::size_type siz_vec;     // тип хранящий размер вектора
    typedef std::map<std::string, std::set<int> >::iterator map_iter;           // вывод данных по найденому слову
 
    // МЕТОДЫ
    void add_line_to_vec(std::ifstream&);                   // Заполнение вектора строками из файла
    void line_to_word_in_map();                             // Разбор строк и заполнение карты
    void get_vec(std::vector<std::string>&);                // Получение вектора
    void print_map(std::map<std::string, std::set<int> > &); // получение карты
    std::map<std::string, std::set<int> >::iterator get_iter_word_map(std::string);  // Получене итератора найденого слова в карте
    void print_result(std::string, bool&);
    
 
private:
    std::map<std::string, std::set<int> > word_map;     // карта хранящая слово(ключ) и номера строк в которых оно встречается(набор)
    std::vector<std::string> line_text;                 // вектор хранящий каждую строку текста
};
 
void open_file(std::ifstream&, std::string);            // открытие файла
void not_punct (std::string&);                          // удаление знаков пунктуации и приведение к строчному виду
void found_and_result(Quer&, std::string&);             // Ввод слова для поиска и вывод результата
void menu();                                            // меню
void output_lines(Quer&, std::string&);                 // Вывод строк с найденым словом
 
#endif

файл TextQuery.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <iostream>
#include <fstream>
#include <sstream>
#include <map>
#include <set>
#include <vector>
#include <string>
#include "TextQuery.h"
 
//Открываем файл
void open_file(std::ifstream& f, std::string ss)
{ 
    if (std::ifstream(ss.c_str()) == NULL) {
        system("cls");
        std::cout << "Error file not found!" << std::endl
            << "Enter file name and its type(name.type)" << std::endl
            << " -> ";
        std::string if_error;
        std::cin >> if_error;
        open_file(f, if_error);
    } else {
        f.open(ss.c_str());
        system("cls");
        std::cout << "Excellent! The file \'"<< ss
            << "\' is opened!" << std::endl;
    }
}
 
//Заполняем вектор строками из открытого файла
void Quer::add_line_to_vec (std::ifstream &f) 
{
    std::string line;
    while (std::getline(f, line)) {
        line_text.push_back(line);
    }       
}
 
//Удаление знаков пунктуации и перевод к строчному виду выбраного слова
void not_punct(std::string &pun)
{
    
    for(std::string::size_type i(0); i != pun.length(); i++) {
        if (isupper(pun[i]))
            pun[i] = tolower(pun[i]);
        if (ispunct(pun[i])) {
            pun.erase(i,1);
            --i;
        }
    }
}
 
//Разбираем строки по словам и заполняем карту
void Quer::line_to_word_in_map()
{
    Quer::siz_vec count(1);
    for(std::vector<std::string>::iterator iter=line_text.begin();
                                            iter != line_text.end(); iter++, count++) {
            std::istringstream stream(*iter);
            std::string word;
            while (stream >> word) {
                not_punct(word);
                word_map[word].insert(count);
            }
 
    }
}
 
//Получение данных вектора
void Quer::get_vec(std::vector<std::string>& ver)
{
    for(std::vector<std::string>::iterator iter = line_text.begin();
                                            iter != line_text.end(); iter++) {
        ver.push_back(*iter);
    }
}
 
//Получение карты
void Quer::print_map(std::map<std::string, std::set<int> > &mape)
{
    for(std::map<std::string, std::set<int> >::iterator iter = word_map.begin();
                                                        iter != word_map.end(); iter++) {
            mape.insert(std::make_pair(iter->first,iter->second));
    }
}
 
//Поиск слова в карте
std::map<std::string, std::set<int> >::iterator Quer::get_iter_word_map(std::string word_founds)
{
    not_punct(word_founds);
    return word_map.find(word_founds);
}
 
//Вывод результата
void Quer::print_result(std::string word_found, bool &fail) 
{
    map_iter iter = Quer::get_iter_word_map(word_found);
    if (iter != word_map.end()) {
        system("cls");
        std::cout << "The word \'" << word_found << "\' found in the following lines:";
        for (std::set<int>::iterator iter_set = iter->second.begin(); iter_set != iter->second.end(); iter_set++) {
            std::cout << " " << *iter_set;
        }
        std::cout << "." << std::endl;
        fail = false;
    } else {
        std::cout << std::endl << "Word not fount!" << std::endl;
        fail = true;
    }
}
 
// Ввод слова для поиска и вывод результата
void found_and_result(Quer& tq, std::string& search)
{
    bool fail = false;      //Проверка на правильность ввода
    do {
        if (fail) 
            std::cout << "Please try again." <<std::endl << "-> ";
        else 
            std::cout << "What word search?" << std::endl << "-> ";
        std::cin >> search;
 
        //Вывод результата
        tq.print_result(search, fail);
    }while (fail);
}
 
 
// меню
void menu()
{
    std::cout << "To show themselves prompt, type 1" << std::endl
        << "To find another word enter 2" << std::endl
        << "To exit, type 0" << std::endl << "-> " << std::flush;
}
 
//Вывод строк со встречающимся словом
void output_lines(Quer& que, std::string &word_for_search) 
{
    std::cout << "The output lines: " << std::endl;
    std::vector<std::string> vec_str_out;
    que.get_vec(vec_str_out);
    Quer::map_iter iter = que.get_iter_word_map(word_for_search);
    for(std::set<int>::iterator it_set = iter->second.begin(); it_set != iter->second.end(); it_set++) {
        std::cout << "(line " << *it_set << ") " << vec_str_out[*it_set-1] << std::endl;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru