Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- struct node
- {
- char data;
- node* next;
- };
- class List
- { public:
- node* top,*marker,*prev,*tail;
- List();
- void Reset();
- void Move();
- bool EoList();
- void AddBeforeMarker(char x);
- void push_back (char x);
- void push_front (char x);
- void MarkerInTheEnd ();
- void Del();
- bool Empty();
- };
- class text : public List
- {
- public:
- List MyList;
- List Word;
- node * LocalTop;
- void createlist();
- void look();
- bool litter1(char x);
- bool litter2(char x);
- bool litter3(char x);
- bool word(char * x);
- bool poli();
- void povorot();
- void write();
- void del();
- };
- List::List()
- {
- top=marker=tail=prev=NULL;
- }
- bool List::Empty () {
- return top==NULL;
- }
- void List::Reset()
- {
- marker = top;
- prev=top;
- }
- void List::Move()
- {
- marker=marker->next;
- }
- bool List::EoList()
- {
- return marker==NULL;
- }
- void List::AddBeforeMarker(char x)
- {
- node * t = new node;
- t->next=marker;
- t->data=x;
- if (marker!=top)
- prev->next=t;
- else
- top=prev=t;
- }
- void List::Del()
- { if (marker!=tail){
- if (top==marker){
- top=top->next;
- delete marker;
- marker=top; prev=top;
- }
- else {
- prev->next=marker->next;
- delete marker;
- marker=marker->next;
- }
- }
- else
- {
- if (top==marker){
- delete marker;
- marker=NULL; prev=NULL;
- }
- else{
- prev->next=NULL;
- delete marker;
- tail=marker=prev;
- node * run = top;
- while (run->next!=tail) run=run->next;
- prev=run;
- }
- }
- }
- void List::push_back (char x)
- {
- if (top==NULL)
- { top=new node;
- top->next=NULL;
- top->data=x;
- tail=top;
- }
- else
- { node * t= new node;
- t->next=NULL;
- t->data=x;
- tail->next=t;
- tail=t;
- }
- }
- void List::push_front (char x) {
- if (top==NULL)
- { top=new node;
- top->next=NULL;
- top->data=x;
- tail=top;
- }
- else
- { node *r=marker, *y=prev;
- Reset();
- AddBeforeMarker(x);
- if (r!=top->next)
- marker=r; y=prev;
- }
- }
- void List::MarkerInTheEnd ()
- { node * t = top;
- marker=tail;
- while (t->next!=marker) t=t->next;
- prev=t;
- }
- void text::createlist()
- {
- string str;
- getline (cin,str);
- int i=0;
- while (str.size()>i)
- { MyList.push_back(str[i]);
- i++;}
- MyList.Reset();
- }
- void text::look(){
- if (!Word.Empty())
- { if (MyList.EoList()) LocalTop=0;
- Word.Reset();
- while (!Word.Empty()) Word.Del();
- }
- LocalTop=MyList.marker;
- while (!MyList.EoList() && MyList.marker->data != ' ')
- {
- Word.push_back ( MyList.marker->data);
- MyList.Move();
- }
- Word.Reset();
- }
- bool text::litter1(char x)
- {return Word.top->data==x;
- }
- bool text::litter2(char x)
- { return Word.tail->data==x;
- }
- bool text::litter3(char x)
- { Word.Reset();
- do {
- if ( Word.marker->data==x)
- return 1;
- Word.Move();
- }
- while (!Word.EoList());
- return 0;
- }
- bool text::word(char * x)
- {Word.Reset();
- int i=0;
- do
- { if (x[i]!=Word.marker->data)
- return 0;
- i++;
- Word.Move();
- }
- while ( x[i] !=0 && !Word.EoList());
- if (x[i] ==0 && !Word.EoList()) return 1;
- }
- bool text::poli(){
- List Stack;
- Word.Reset();
- do
- {
- Stack.push_front(Word.marker->data) ;
- Word.Move();
- }
- while (Word.marker!=NULL);
- Stack.Reset();
- Word.Reset();
- while ( Word.marker->data==Stack.marker->data && Word.marker!=NULL && Stack.marker!=NULL)
- {
- Word.Move();
- Stack.Move();
- }
- if (Word.marker==NULL && Stack.marker==NULL ) return true;
- else return false;
- }
- void text::povorot()
- {
- List Stack;
- Word.Reset();
- do
- {
- Stack.push_front(Word.marker->data);
- Word.Move();
- }
- while (!Word.EoList());
- Word.Reset();
- Stack.Reset();
- node * t=LocalTop;
- do
- {
- Word.marker->data= Stack.marker->data;
- t->data= Stack.marker->data;
- Word.Move();
- Stack.Move();
- t=t->next;
- }
- while (!Word.EoList());
- }
- void text::write()
- {
- MyList.Reset();
- while (!MyList.EoList())
- {
- cout<<MyList.marker->data;
- MyList.Move();
- }
- }
- void text::del() {
- MyList.Reset();
- while (MyList.marker->next==LocalTop) MyList.Move();
- node * NewMark=MyList.marker;
- MyList.marker=LocalTop;
- while (!MyList.EoList() && MyList.marker->data!=' ')
- {MyList.Move();
- delete MyList.prev;
- }
- if (!MyList.EoList())
- {
- NewMark=MyList.marker->next;
- delete MyList.marker;
- MyList.marker=NewMark;
- }
- else
- NewMark->next==NULL;
- }
- int main ()
- {text NewText;
- NewText.createlist();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement