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

автомат для проверки ввода - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ про std http://www.cyberforum.ru/cpp-beginners/thread827948.html
Доброго времени суток. Написал достаточно большую программу и тут понадобилось удалить файл.... прочитал в инете про функцию int remove. В начале проги написано using namespace std; Когда стал компилить вылезла ошибка error C2883: remove: объявление функции вступает в конфликт с "remove", присутствующем в "using"-объявлении Вобщем вопрос: можно как нибудь удалить файл и чтобы это не...
C++ с++ dos box,64 разрядная платформа - Выполнить скалярное произведение двух векторов Выполнить скалярное произведение двух векторов. Обеспечить проверку на равенство длин векторов http://www.cyberforum.ru/cpp-beginners/thread827940.html
C++ Конструктор копирования в Visual Studio 2012
По идее это должен выполнять конструктор копирования. В мэине String rgb = s1; работает, а String rgb = String (s1); уже нет. хэдэр #ifndef STRING1_H_ #define STRING1_H_ #include <iostream> class String { private: char * str; int len;
C++ с++ dos box,64 разрядная платформа - Выполнить поиск максимального и минимального элементов массива
Выполнить поиск максимального и минимального элементов массива, подсчитать количество положительных, отрицательных и нулевых элементов массива
C++ с++ dos box,64 разрядная платформа - Вычислить максимальный показатель степени числа http://www.cyberforum.ru/cpp-beginners/thread827935.html
Задано число. Вычислить максимальный показатель, с которым степень этого числа по длине не превысит слова.
C++ с++ dos box,64 разрядная платформа - Вычислите n-й член F(n) последовательности Фибоначчи Вычислите n-й член F(n) последовательности Фибоначчи. В этой последовательности первые два члена равны 1, а каждый последующий равен сумме двух предыдущих подробнее

Показать сообщение отдельно
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
04.04.2013, 21:16  [ТС]     автомат для проверки ввода
Только аналог вектора придется написать самому Программу будут тестировать на скорость (до разумных пределов в рамках задания, дальше бонусы, но не с моими знаниями туда соваться ), поэтому попросил описание реализации как конечного автомата со switch case, если писать свой вектор, то ничем хорошим это не кончится , если делать кучу ифов, то либо что-то пропустишь либо скорость неахти, либо повезет и все будет тип топ В любом случае спасибо, потестирую, если все норм, то возьму проверки на вооружение

Добавлено через 3 часа 0 минут
Написал вот так:
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
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <string>
using namespace std;enum States {
    State_StartMatrix,
    State_Start,
    State_OpenLine,
    State_NextLine,
    State_EndLine,
    State_EndMatrix,
    State_GotNumber,
    State_NextNumber,
    State_Error
};
 
int main(int argc, char** argv) {
 
 
    std::istringstream is;
    std::ostringstream os;
    bool MatrixOpened = false;
    bool LineOpened = false;
    int LinesCount = 0;
    double d;
    char c;
    is . clear();
    is . str("{ { 1.1782, 2, \n\t\r3, \n\t\r4\n\t\r }\n\t\r,\n\t\r {\n\t\r 4, 3, 2, 1 } } ");
 
 
    cout << is.str();
    bool WhileBool = true;
    States state = State_Start;
    const size_t length = is.str().length();
    while (WhileBool) {
        switch (state) {
            case State_Start:
                is >> skipws >> c;
                if (c == '{') {
                    state = State_StartMatrix;
                } else {
                    state = State_Error;
                }
                break;
            case State_StartMatrix:
                is >> skipws >> c;
                if (c == '{') {
                    LinesCount++;
                    state = State_NextNumber;
                } else {
                    state = State_Error;
                }
                break;
            case State_NextNumber:
                is >> skipws >> d;
                if (!is.fail()) {
                    cout << "num: '" << d << "'" << endl;
                    state = State_GotNumber;
                } else {
                    state = State_Error;
                }
                break;
            case State_GotNumber:
                is >> skipws >> c;
                if (c == ',') {
                    state = State_NextNumber;
                } else if (c == '}') {
                    state = State_EndLine;
                } else {
                    state = State_Error;
                }
                break;
            case State_EndLine:
                is >> skipws >> c;
                if (c == ',') {
                    state = State_StartMatrix;
                } else if (c == '}') {
                    state = State_EndMatrix;
                } else {
                    state = State_Error;
                }
                break;
            case State_EndMatrix:
                WhileBool = false;
                break;
            case State_Error:
                is.setstate(std::ios::failbit);
                WhileBool = false;
                break;
        }
    }
 
    cout<<is.fail()<<endl;
 
    return 0;
}
Это чисто проверка идеи, вылизывать не стал - кому надо сам поправит, принцип ясен.
 
Текущее время: 12:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru