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

Название файла по маске - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ 4 лёгкие задачки http://www.cyberforum.ru/cpp-beginners/thread1023207.html
Добрый вечер! Помогите, пожалуйста написать (желательно просто) эти программки. Буду благодарен! одна тема - одна задача тексты заданий перепечатываем на форум читаем правила.
C++ написать программу, которая будет выводить на экран количество повторений введенного с клавиатуры символа написать программу, которая будет выводить на экран количество повторений введенного с клавиатуры символа http://www.cyberforum.ru/cpp-beginners/thread1023205.html
C++ Одномерный массив
Помогите с задачкой извелась уже не выходит Дан массив содержащий сведения о росте студентов. Вывести номера студентов с одинаковым ростом. у меня вот это получается но пока не работает #include<iostream> using namespace std; int main() { float a;
Нужно дописать, произведение отрицательных элементов массива, расположенных между минимальным и максимальным элементами C++
#include <iostream> #include <stdlib.h> #include <time.h> #include <cmath> using namespace std; void tselyi1(int *mas, int const n); void tselyi2(int *mas, int const n);
C++ Установить значение переменной из другого класса http://www.cyberforum.ru/cpp-beginners/thread1023186.html
Всем здрасьте. У меня есть 3 класса.Почти не как от друга не зависят. На скрине показана схемка. Так вот , в классе MENU у меня есть переменная name_slot типа LPCWSTR. Так же есть в классе функция взятие этой переменной: LPCWSTR MenuClass::GetName() { return name_slot; }
C++ Перегрузка операций Разработайте программу на языке С++, используя пользовательский тип данных – классы и перегрузку операций. Создайте класс Fraction (обыкновенная дробь), включающего поля: числитель и знаменатель. Реализовать методы определения обратной дроби и вывода дроби. Перегрузить операции сложения, вычитания и умножения дробей. Помогите с лабой пожалуйста подробнее

Показать сообщение отдельно
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378

Название файла по маске - C++

29.11.2013, 19:53. Просмотров 1322. Ответов 3
Метки (Все метки)

Добрый вечер!

Пытаюсь решить олимпиадную задачу:
Кликните здесь для просмотра всего текста
Миша готовится к ЕГЭ по информатике. Сейчас он изучает задачу A4, в которой описывается работа с масками файлов:

Для групповых операций с файлами используются маски имён файлов. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, в которой также могут встречаться следующие символы.

Символ «?» (вопросительный знак) означает ровно один произвольный символ.

Символ «*» (звёздочка) означает любую последовательность символов произвольной длины, в том числе «*» может задавать и пустую последовательность.

Поскольку открытого банка задач для ЕГЭ по информатике не существует, Мише приходится тренироваться самостоятельно. Напишите программу, которая для каждого имени файла определит, подходит ли оно под заданную маску, чтобы Миша мог сверить свои ответы. Гарантируется, что в маске файла присутствует не более одного символа «*».

Входные данные

В первой строке содержится маска файла. В следующих 5 строках содержатся имена файлов по одному в строке. Имена файлов состоят из маленьких латинских букв, цифр и символа «.» (точка), в маске также могут содержаться символы «?» и «*» (символ «*» — не более одного раза). Длина каждой строки не превосходит 20 символов.

Выходные данные

Для каждого имени файла выведите слово «YES» если оно удовлетворяет маске и «NO» иначе. Выводить слова следует большими латинскими буквами без кавычек, каждое в новой строке.


В этой задаче нужно написать свою функцию, которая проверяла бы соответсвие соответствие названия файла некоторой маске. Название файла и длина маски не превышает 20 символов, в маске могут быть символы латинского алфавита, точка ("."), знак вопроса ("?") - означает любой символ и звездочка ("*", означает любую, даже пустую последовательность символов)- она может быть только одна.

Например, маске ?or*.d?? соттветствует файл lord2.doc, но не соответствует orsk.dat.

Как я представляю, как решать эту задачу: пока символы соответствуют друг другу, пробегаем строку слева направо и справа налево с двух концов до звездочки (если есть таковая); если смиволы совпали до этого момента, то все отлично; если нет - то все плохо. Но у меня возникла проблема с реализацией (я пытался написать эту программу, но она косая и не работает; не знаю, как учесть случаи разных длин строк и т.п.)
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string.h>
 
using namespace std;
 
int main()
{
    string mask, s;
    cin >> mask;
    for (int ct = 0; ct < 5; ++ct)
    {
        bool ok = true, zv = false;
        cin >> s;
        int sm = 0, i = 0;
        for (i = 0; i < max(s.length(), mask.length()); i++)
        {
            if (i > min(s.length(), mask.length()))
            {
                ok = false;
                break;
            }
            if (mask[i] == '*') break;
            if (s[i] != mask[i] && mask[i] != '?')
            {
                ok = false;
                cout << "mask[" << i << "] != s[" << i <<"]" << endl;
                break;
            }
        }
        int j= 0, t;
        for (j = s.length() - 1; j >= 0 && mask[j] != '*'; j--)
        {
            t = j - s.length() + mask.length();
            if (t < 0) break;
            if (s[j] != mask[t] && mask[t] != '?')
            {
                ok = false;
                cout << "right  mask[" << t << "] != s[" << j <<"]" << endl;
                break;
            }
        }
 
        if (!ok)
            cout << "NO" <<endl;
        else
            cout << "YES" << endl;
    }
    return 0;
}

Помогите, пожалуйста, реализовать эту программу!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru