Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Создание перегрузки метода "operator =" для типа, расположенного в ином namespace Здравствуйте. Столкнулся со следующей проблемой которая упрощено выглядит так namespace M{ struct A{ int b; int c; }; // -- https://www.cyberforum.ru/ cpp-beginners/ thread1342080.html C++ Функции для обработки прямоугольной матрицы
Дана целочисленная прямоугольная матрица. Определить: 1) количество строк, содержащих хотя бы один нулевой элемент; 2) номер столбца, в которой находится самая длинная серия одинаковых элементов. код на C++ через функции
C++ Входит ли точка в данную область https://www.cyberforum.ru/ cpp-beginners/ thread1342073.html
Помогите, что не так в коде? Если точка лежит возле нижней части фигуры, выдает неправильный результат #include <iostream> using namespace std; int main(int argc, char* argv)
C++ В квадрате 4х4 клетки расставить 16 букв так, чтобы в строках/столбцах буквы не повторялись (комментарии) https://www.cyberforum.ru/ cpp-beginners/ thread1342071.html
Здравствуйте, может кто нибудь прокомментировать эту программу?, я понимаю как она работает, но не очень вникаю. Я знаю что вводится char в котором записывается в первую строку и создается массив в котором делается здвиг на одну позицию. Сама задача: В квадрате размером 4 х 4 клетки расставить 16 букв (по четыре буквы а, b, c, d) так, чтобы в каждом горизонтальном и в каждом вертикальном ряду...
Указать папку для статически подключаемых dll C++
Вопрос в теме. В темах форума ничего дельного не нашел.
C++ Преобразовать заданную строку так, чтобы все цифры в ней были отсортированы по убыванию Помогите плиз :"C Задана строка, состоящая из символов. Символы объединяются в слова. Слова друг от друга отделяются одним или несколькими пробелами. В конце текста ставится точка. Текст содержит не более 255 символов. Выполнить ввод строки и обработку строки: Преобразовать строку так, чтобы все цифры в ней были отсортированы по убыванию. https://www.cyberforum.ru/ cpp-beginners/ thread1342038.html
C++ Перенести в массив С те элементы из массивов A и B, которые больше чем среднее арифметическое их минимумов https://www.cyberforum.ru/ cpp-beginners/ thread1342031.html
Заданы массивы а1, а2, … , аn и b1, b2, … , bm Перенести в массив С те элементы из массивов, которые больше чем (min_a+min_b)/2 При формировании элементов массива предусмотреть выбор варианта: случайным образом, вводом с клавиатуры или вводом из файла; Предусмотреть вывод промежуточных результатов и результатов обработки на экран и/или в файл; При вводе из файла при недостаточном объеме...
C++ Массив результатов соревнований. Определить победетелей.
Состязания. Если перенумеровать спортсменов числами от 0 до n-1, а попытки каждого из них – от 0 до m-1, то на вход программа получает массив int A, состоящий из неотрицательных чисел. Будем считать, что победитель определяется по лучшему результату. Определите количество участников состязаний, которые разделили первое место, то есть определите количество строк в массиве, которые содержат...
C++ Структура "Студент" Ребят, проверьте, пожалуйста, этот код, а то у меня не хочет она работать: #include<iostream> #include<string.h> #include<cstdlib> #include<fstream> struct Students { int NumberStud; char FamStud; char NameStud; https://www.cyberforum.ru/ cpp-beginners/ thread1341992.html C++ Хеш-таблицы и хеш-функции. Имеется программа, но не могу переделать тип входных данных Доброго времени суток. Есть программа работающая с хеш-таблицами. То есть создается таблица, заполняется и обрабатывается, то есть ведется поиск. Параметры: Метод хэширования: Деление. Тип данных: Строки. Метод разрешения коллизий: Открытая адресация. #include <iostream> #include <clocale> #include <string> #include <windows.h> using namespace std; https://www.cyberforum.ru/ cpp-beginners/ thread1341982.html
Как вставить функцию? C++
Нужно вывести номер столбца в котором все числа нечетные. Программа может вывести только один номер, если в матрице не 1 столбец с нечетными числами, а 2 или более, то программа выводит только один столбец, наибольший. Как изменить программу с помощью функции? #include <iostream> #include <stdio.h> using namespace std; int main() { int m, n, l = 0;
C++ В строке найти количество встречающихся рядом символов соседних по алфавиту В строке найти количество встречающихся рядом символов «соседних по алфавиту» - «а» и «б», «Ю» и «Я» и т.п. Дописать в конец строки слово «Ботаник». Прошу помочь, совсем не понимаю, как так сделать https://www.cyberforum.ru/ cpp-beginners/ thread1341952.html
1 / 1 / 3
Регистрация: 18.04.2014
Сообщений: 118
27.12.2014, 10:46  [ТС] 0

Программа для поиска введенного слова или фразы во всех файлах каталога - C++ - Ответ 7043280

27.12.2014, 10:46. Показов 9741. Ответов 5
Метки (Все метки)

Ответ

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
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
#include <iostream>
#include <windows.h>
#include <list>
#include <fstream>
#include <time.h>
#include <string>
#include <vector>
#include <stack>
#include "IDZ.h"
 
using namespace std;
 
class poisk
{
protected:
 
    //имя файла, в который записуются результаты поиска
    string Name;
 
    //фраза для поиска
    string Fraz;
 
    //имя конрневого каталога 
    string mainName;
 
 
    bool scan;
    bool ftxt;
    bool fxml;
    bool fhtml;
 
public:
    poisk(string _mainName, bool _scan, string _Fraz, string _Name, bool _txt = 1, bool _xml = 1, bool _html = 1);
 
    int ready();
 
    //главный цикл поиска(перебирает все файлы и ведет статистику)
    void start();
 
};
 
poisk::poisk(string _mainName, bool _scan, string _Fraz, string _Name, bool _ftxt, bool _fxml, bool _fhtml)
{
 
    mainName = _mainName;
    scan = _scan;
    Fraz = _Fraz;
    Name = _Name;
    ftxt = _ftxt;
    fxml = _fxml;
    fhtml = _fhtml;
 
}
 
int poisk::ready()
{
    //если не нужно искать ни 1 из типов, то тогда нет смысла начинать:)
    if (!(ftxt||fxml||fhtml)) return 1;
    
    //проверяем каталог для поиска на существование и доступа чтения
    if (_access(mainName.c_str(), 4) == -1)
        return 2;
 
    //находим имя папки, в которую будем писать результаты
    string logDir(Name, 0, Name.find_last_of('\\')+1);
    //проверяем папку на возможность записи
    if (_access(logDir.c_str(), 2) == -1)
        return 3;
 
    return 0;
}
 
void poisk::start(){
 
    //не запускаем,если не готовы
    if (ready() != 0) return;
 
 
    //создаем массив(массив указателей на класс Results), который будет содержать лог
    vector<Result *> LOG;
    //создавать обьекты такого класса(абстрактного) нельзя, но можно создавать на него ссылки
    //этими ссылками так же можно указывать на все классы, что унаследованы от класса Result
    //т.е. у нас массив с ссылками, что указывают на разные классы, но отец у них 1-Result
    //у него есть все нужные методы, кроме search, их реализует каждый потомок самостоятельно
 
    //vector-это такой динамический класс, который при переполнении сам выделяет себе память
    //его можно использовать как обычный массив, но кроме этого у него есть еще полезные методы типа size и push_back
 
    //в этом стеке будут все имена каталогов, которые нужно будет проверить
    stack<string> dirs;
 
    //изначально в стеке путь к папке, которую задал пользователь
    //дальше, если задан поиск в подкоталогах, в стек будут добавляться имена подкаталогов
    dirs.push(mainName);
 
    //засекаем время
    clock_t startT = clock();
    
    //количество сканированых файлов, совпадений
    int fCount(0), mCount(0);
    //строк
    long lCount(0);
 
 
    //главный цикл поиска
    bool cEnd = false;
 
    //пока есть папки, в которых можно производить поиск
    while (!dirs.empty())
    {
 
        //находим файл//////////////////
        string fullFileName;
        string fileName;
 
        string curDir;
        //вытаскиваем из стека полное имя каталога
        curDir = dirs.top();
        dirs.pop();
 
        WIN32_FIND_DATA dir;
        string buf;
 
        //string(curDir+"\\").c_str() - создаем анонимный класс и передаем указатель на массив символов
        HANDLE han = FindFirstFile(string(curDir+"*").c_str(), &dir);
 
        if (han != INVALID_HANDLE_VALUE)
        {
            
            do
            {
                fileName=dir.cFileName;
                //выводим статистику
 
                //очищаем командную строку
                system("cls");
                cout << "В процессе проверки:" << fileName << endl;
                cout << "Файлов проверено:" << fCount << endl;
                cout << "Строк проверено:" << lCount << endl;
                cout << "Совпадений найдено:" << mCount << endl;
 
                //вычисляем время со старта
                clock_t currT = clock();
                cout << "Время с начала старта поиска: " << (currT - startT) / 1000. << " сек." << endl;
 
                //проверем "файл ли это?"
                if (fileName.find('.') != -1)
                {
                    //полное имя файла
                    fullFileName.clear();
                    fullFileName = curDir + fileName;
 
                    //проверяем окончание////////////////////////
 
                    //находим номер символа "точка"
                    int offs = fullFileName.find_last_of('.') + 1;
 
                    //копируем адресс названия файла со смещением(копируем символы после точки)
                    string format(fullFileName, offs, fullFileName.size() - offs);
 
 
                    //поскольку string не подходит для switch используем if
                    //тк расширение только 1, то и выполниться только 1 из следующих вариантов
 
                    if (format == "txt" && ftxt)
                    {
                        LOG.push_back(new TxtResult(fullFileName, Fraz));
                        LOG[LOG.size() - 1]->search();
                        //запись статистики/////////////////////
                        lCount += LOG[LOG.size() - 1]->getStrCount();
                        mCount += LOG[LOG.size() - 1]->getMatchesCount();
                        fCount++;
                    }
 
                    if (format == "xml" && fxml)
                    {
                        LOG.push_back(new XmlResult(fullFileName, Fraz));
                        LOG[LOG.size() - 1]->search();
                        //запись статистики/////////////////////
                        lCount += LOG[LOG.size() - 1]->getStrCount();
                        mCount += LOG[LOG.size() - 1]->getMatchesCount();
                        fCount++;
                    }
 
                    if (format == "html" && fhtml)
                    {
                        LOG.push_back(new HtmlResult(fullFileName, Fraz));
                        LOG[LOG.size() - 1]->search();
                        //запись статистики/////////////////////
                        lCount += LOG[LOG.size() - 1]->getStrCount();
                        mCount += LOG[LOG.size() - 1]->getMatchesCount();
                        fCount++;                       
                    }
 
                    
                }
                else
                {//если в имени файла нет точки, то в fileName имя каталога
                
                    //если включен поиск в подкаталогах, то добавляем в стек папку для дальнейшей проверки
                    if (scan) dirs.push(curDir + fileName+"\\");
                }
            } while (FindNextFile(han, &dir));
 
 
        }   
    }
    
    //очищаем данные прошлоо поиска
    ofstream f(Name, ios::out);
    f.close();
 
    //для каждого обьекта вызываем метод printIfSucces, который запишет данные своего обьекта
    //если он что-то нашел
    for (int i = 0; i < LOG.size(); i++)
    {
        LOG[i]->printIfSucces(Name);
    }
 
    //выводим статистику
 
    //очищаем командную строку
    system("cls");
 
    cout << "Файлов проверено:" << fCount << endl;
    cout << "Строк проверено:" << lCount << endl;
    cout << "Совпадений найдено:" << mCount << endl;
 
    //вычисляем время со старта
    clock_t currT = clock();
    cout << "Время с начала старта поиска: " << (currT - startT) / 1000. << " сек." << endl;
    
    cout << "!!!!!!!!!!!!!!!!Search was finishd!!!!!!!!!!!!!!!!!" << endl;
 
 
}
int main()
{
    setlocale(0, "rus");
    
    //буфер для коректного переноса русских символов в string
    char OEMc[256] = "";
 
    bool allFine = false;
 
    //переенные для запоминания параметров ss-поиск в подкаталогах
    bool txt(false), html(false), xml(false), v(false);
    string root, Fraz,logDir;
 
    while (!allFine)
    {
        cout << "Vvedite put: ";
            
 
        //вводим строку
        cin.getline(OEMc,256);
        
        //перекодирываем из кодировки консоли в Ansi
        OemToCharA(OEMc, OEMc);
 
        //определяем параметры
        string buf(OEMc);
 
        //диапазоны параметров в строке
        int a, b;
 
        //в вырезаем в root название каталога(без [])
        a = buf.find('[');
        b = buf.find(']');
        //проверяем коректность ввода пользователя
        if (a>=0 && b>0 && b>a)
        {
            root = string(buf, a + 1, b - a - 1);
            buf.erase(0, b + 1);
        }
        else
        {
            allFine = false;
        }
    
 
        //вырезаем фразу для поиска
        a = buf.find('[');
        b = buf.find(']');
        if (a >= 0 && b>0 && b>a)
        {
            Fraz = string(buf, a + 1, b - a - 1);
            buf.erase(0, b + 1);
        }
        else
        {
            allFine = false;
        }
 
        //вырезаем имя директории для создания файла с результатами
        a = buf.find('[');
        b = buf.find(']');
        if (a >= 0 && b>0 && b>a)
        {
            logDir = string(buf, a + 1, b - a - 1);
            buf.erase(0, b + 1);
        }
        else
        {
            allFine = false;
        }
 
        //такой вариант был бы неуместный, если бы мы могли искать в файлах типа xhtml,css или тд
        //но в нашем случае так делать можно
        if (buf.find("txt")!=-1) txt = true;
        if (buf.find("xml") != -1) xml = true;
        if (buf.find("html") != -1) html = true;
        if (buf.find("ss") != -1) v = true;
        
        
        if (!allFine) cout << "Был выполнен некорректный ввод!\n";
 
        //создаем обьект поискового класса
        poisk asd(root, v, Fraz,logDir, txt, xml, html);
 
        allFine = false;
 
        switch (asd.ready())
        {
        case 0: {
                    asd.start();
                    allFine = true;
        }break;
        case 1: cout << " Укажите хотя бы 1 тип для поиска!\n";
            break;
        case 2: cout << " Указаная папка для поиска не доступна для чтения или не существует!\n";
            break;
        case 3: cout << " Невозможно создать файл по указанному пути!\n";
            break;
        default:
            break;
        }
 
 
        
    }
 
    
    
    system("pause");
}


Вернуться к обсуждению:
Программа для поиска введенного слова или фразы во всех файлах каталога C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.12.2014, 10:46
Готовые ответы и решения:

Подсчет частоты повторений каждого слова во всех текстовых файлах указанного каталога (*.txt)
Не знаю как указать каталог и перебрать все файлы в нем sed -e 's/\.//g' -e 's/ /\ /g' &quot;$1&quot; |...

Найти строку во всех файлах заданного каталога и всех его подкаталогах
Написать скрипт для поиска заданной пользователем строки во всех файлах заданного каталога и всех...

Поиск заданной пользователем строки во всех файлах заданного каталога и всех его подкаталогах
Написать скрипт для поиска заданной пользователем строки во всех файлах заданного каталога и всех...

Подскажите утилиту для поиска текста во всех файлах, содержащих текст
Утилита grep не ищет в файлах .doc (или быть может я не правильно пользуюсь?). Подскажите как...

5
27.12.2014, 10:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2014, 10:46
Помогаю со студенческими работами здесь

Редактор с возможностью многострочного поиска (замены) в файлах каталога, поддерживающий utf8
Здравствуйте! кто-нибудь знает такой?

Программа для составления слов из введенного слова.
Нахождение в заданном словаре слов,содержащих только букыв заданого слова (например дано слово...

Поиск заданной строки во всех текстовых файлах заданного каталога
Поиск заданной строки во всех текстовых файлах заданного каталога. Алгоритм &quot;лечения&quot;: перемещение...

Программа для вывода введенного слова задом на перед
Ребят помогите написать такую программу, а то я что то не пойму как это сделать

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru