Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <deque>
- #include <iostream>
- class Connection
- {
- private:
- char symb;
- int startState;
- int finState;
- public:
- Connection()
- {
- symb = NULL;
- startState = -1;
- finState = -1;
- };
- Connection(char s, int start, int fin)
- {
- symb = s;
- startState = start;
- finState = fin;
- }
- Connection(char s)
- {
- symb = s;
- startState = -1;
- finState = -1;
- }
- void setStState(int st)
- {
- startState = st;
- }
- void setFinState(int st)
- {
- finState = st;
- }
- void getInfo()
- {
- std::cout << startState << "---" << symb << "-->" << finState << std::endl;
- }
- int getFinState()
- {
- return finState;
- }
- int getStartState()
- {
- return startState;
- }
- };
- void patchDot(Connection obj1, Connection& obj2)
- {
- obj2.setStState(obj1.getFinState());
- obj2.setFinState(obj1.getFinState() + 1);
- }
- void patchStick(Connection obj1, Connection& obj2)
- {
- obj2.setStState(obj1.getStartState());
- obj2.setFinState(obj1.getFinState());
- }
- void Star(Connection& obj)
- {
- obj.setFinState(obj.getStartState());
- }
- int main()
- {
- char *txt = new char[255];
- int counter = 0;
- int i = 0;
- while (std::cin >> txt[i])
- i++;
- txt[i] = '\0';
- std::cout << std::endl;
- if (txt[0] == '\0')
- {
- std::cout << "String is empty" << std::endl;
- return 0;
- }
- std::deque<Connection> FSM;
- i = 0;
- while (txt[i] != '\0')
- {
- switch (txt[i])
- {
- default:
- {
- Connection *obj = new Connection(txt[i], counter, counter + 1);
- counter++;
- FSM.push_back(*obj);
- delete obj;
- i++;
- break;
- }
- case '.':
- {
- i++;
- Connection *obj2 = new Connection(txt[i]);
- patchDot(FSM[counter - 1], *obj2);
- counter++;
- FSM.push_back(*obj2);
- delete obj2;
- i++;
- break;
- }
- case '|':
- {
- i++;
- Connection *obj = new Connection(txt[i]);
- patchStick(FSM[counter - 1], *obj);
- counter++;
- FSM.push_back(*obj); delete obj;
- i++;
- break;
- }
- case '?':
- {
- Connection *obj = new Connection(' ');
- patchStick(FSM[counter - 1], *obj);
- counter++;
- FSM.push_back(*obj); delete obj;
- i++;
- break;
- }
- case '*':
- {
- Connection *obj = new Connection(' ');
- patchStick(FSM[counter - 1], *obj);
- Star(FSM[counter - 1]);
- FSM.push_back(*obj);
- delete obj; i++; counter++;
- break;
- }
- case '+':
- {
- Connection *obj = new Connection(' ');
- Star(FSM[counter - 1]);
- patchDot(FSM[counter - 1], *obj);
- FSM.push_back(*obj);
- delete obj; i++; counter++;
- break;
- }
- }
- }
- for (int i = 0; i < FSM.size(); i++)
- {
- FSM[i].getInfo();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement