Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- class Node{
- private:
- char value;
- bool epsilon;
- bool end;
- std::vector<Node*> next;
- public:
- Node(char value, std::vector<Node*> next, bool epsilon=false, bool end=false) :
- value(value), next(next), epsilon(epsilon), end(end)
- {};
- bool check(std::string input) const{
- std::cout << value << "(" << epsilon << "," << end << "):" << input << "\n";
- if (input.size()==0 || (value!=input[0] && !epsilon))
- return false;
- if (input.size()==1 && !epsilon)
- return end || next.size()==0;
- else
- for (int j=0; j<next.size(); j++)
- if (next[j]->check(input.substr(!epsilon)))
- return true;
- return false;
- }
- };
- int main(){
- Node * word =
- new Node(' ', {
- new Node('a', {
- new Node('p', {
- new Node('p', {
- new Node('l', {
- new Node('e', {})
- })
- }),
- new Node('p', {
- new Node('u', {
- new Node('t', {})
- }),
- new Node('l', {
- new Node('d', {
- new Node('e', {})
- })
- }, false, true)
- })
- })
- })
- }, true);
- std::cout << word->check("apple") << "\n\n";
- std::cout << word->check("apput") << "\n\n";
- std::cout << word->check("appl") << "\n\n";
- std::cout << word->check("applk") << "\n\n";
- std::cout << word->check("applde") << "\n\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement