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

Поиск файлов по расширению - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывести все четные числа, кратные пяти, в интервале от 2 до 100 включительно http://www.cyberforum.ru/cpp-beginners/thread1495881.html
Составить блок-схему алгоритма и программу согласно зада- нию. Вывести все четные числа кратные пяти в интервале от 2 до 100 вклю- чительно.
C++ Задача с использованием множества: каких символов в заданной строе больше: русских или латинских? Всем привет. Помогите решить задачу: Решить задачу с использованием множества: каких символов в заданной строе больше: русских или латинских? Заранее благодарен. http://www.cyberforum.ru/cpp-beginners/thread1495877.html
C++ Указать общие символы первого и последнего слова в заданной строке (с использованием множества)
Помогите решить задачу с использованием множества: указать общие символы первого и последнего слова в заданной строке.
Сформировать из данного числа другое число, которое содержит только четные цифры (рекурсия) C++
Помогите описать рекурсивную подпрограмму, формирующую из данного натурального числа другое число, которое содержит только четные цифры (порядок следования сохраняется).
C++ Каковы современные решения написания программ? http://www.cyberforum.ru/cpp-beginners/thread1495803.html
Уже пол года как изучаю с++. За это время решил не мало задачек и перечитал литературы. Писал все программы в основном в Builder`e и консольные в vs. Вот решил узнать как создаются более менее...
C++ Ошибка компиляции единого файла: undefined reference to `vtable for .' Проблема при компиляции файла: prog.cpp:(.text.startup+0x42): undefined reference to `vtable for Man' prog.cpp:(.text.startup+0x64): undefined reference to `vtable for PC' collect2: error: ld... подробнее

Показать сообщение отдельно
Геомеханик
709 / 515 / 364
Регистрация: 26.06.2015
Сообщений: 1,234
09.07.2015, 16:26
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
#include <iostream>
#include <list>
#include <string>
#include <set>
#include <io.h>
typedef std::list<std::string> flist;
typedef std::set<std::string>  fset;
 
void  tokenize(const char* s, fset* exts);
char* copy_ext(char* d, int n, const char* s);
bool  is_ctrl_dir(const char* s);
 
 
//поиск файлов с указанными расширениями включая под-папки
bool get_files(const char* folder, const fset* exts, flist* lst){
    char        ext[32];
    std::string ps;
    _finddata_t inf;
 
    bool slash = true;
    ps = folder;
    if((ps.length() > 0) && (ps[ps.length() - 1] != '\\')){
        slash = false;
        ps   += '\\';
    }
    ps.append("*.*");
 
    long fp = _findfirst(ps.c_str(), &inf);
    if(fp == -1)
        return false;
 
    do {
 
        if(inf.attrib & _A_SUBDIR){ //искать в под-папках
 
            if(is_ctrl_dir(inf.name)){
                ps = folder;
                if(! slash)
                    ps += '\\';
                ps.append(inf.name);
                get_files(ps.c_str(), exts, lst);
            }
        } else {
 
            copy_ext(ext, sizeof(ext)-1, inf.name);
 
            if(exts->find(ext) != exts->end()){
                lst->push_back(folder);
                if(! slash)
                    lst->back() += '\\';
                lst->back().append(inf.name);
            }
        }
 
    } while(_findnext(fp, &inf) != -1);
 
    _findclose(fp);
    return true;
}
 
 
 
int main(void){
    //пример заданий расширений через точку запятой
    char ebuf[64] = "txt;pdf;doc;png;";
 
    //ввод расширений
    std::cout << "Enter exts: ";
    std::cin.getline(ebuf, sizeof(ebuf)-1);
 
    fset exts;
    tokenize(ebuf, &exts);
 
    //ввод пути 
    char path[255];
    std::cout << "Enter path: ";
    std::cin.getline(path, sizeof(path)-1);
    std::cin.sync();
 
    flist fs;
    get_files(path, &exts, &fs);
 
    //всего найденого файлов
    std::cout << "\tcount find files: "
              << fs.size() << std::endl;
 
    //вывести список найденных файлов
    flist::const_iterator i = fs.begin();
    while(i != fs.end()){
        std::cout << *i << std::endl;
        ++i;
    }
 
    fs.clear();
    exts.clear();
    std::cin.get();
    return 0;
}
 
//отделение расширений, пример: "txt;pdf;doc;png;"
void tokenize(const char* s, fset* exts){
    const char* p;
    while(*s){
        p = s;
        while(*p && (*p != ';'))
            ++p;
 
        if((p - s) > 0)
            exts->insert(std::string(s, p));
 
        if(*p == ';')
            ++p;
        s = p;
    }
}
 
//копируем расширение у имени файла
char* copy_ext(char* d, int n, const char* s){
    char* t = d;
    while(*s)
        ++s;
 
    s -= 1;
    while((s != t) && (*s != '.'))
        --s;
 
    if(*s == '.'){
        ++s;
        while(*s)
            *d++ = *s++;
    }
    *d = '\0';
    return t;
}
 
bool is_ctrl_dir(const char* s){
    int i = 0, j = 0;
    while(*s){
        if(*s == '.')
            ++i;
        ++s;
        ++j;
    }
    return (i != j);
}
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.