Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct node
- {
- char info;
- node* next;
- };
- class List
- {
- protected: node * head, *marker, *pred;
- public:
- List();
- void Reset();
- void Move();
- bool EoL();//1 if marker=NULL
- void Add(char data);
- void Del();
- void NewElem(char data);
- };
- List::List()
- {
- head = NULL;
- marker = NULL;
- pred = marker;
- }
- void List::Reset()
- {
- marker = head;
- pred = marker;
- }
- void List::Move()
- {
- //pred = marker;
- marker = marker->next;
- }
- bool List::EoL()
- {
- return (marker==NULL);
- }
- void List::Add(char data)
- {
- node* p = new node;
- p->info = data;
- pred->next = p;
- p->next = marker;
- }
- void List::Del()
- {
- node* p = marker;
- Move();
- pred->next = marker;
- delete p;
- }
- void List::NewElem(char data)
- {
- marker = new node;//функция
- marker->info = data;
- marker->next = NULL;
- }
- struct node3
- {
- char info;
- node3* next;
- };
- class Redoct:public List
- {
- public:
- void creatList(ifstream & f);
- Redoct startWord();
- bool Begin(char a);
- bool End(char a);//маркер у нас на конце слова слова
- bool InWord(char a);
- bool Same(char *a, int n);
- Redoct Copy();// наоборот
- bool Palindrom();//
- void Perevorot();
- void Show();
- void Delet();///
- Redoct creatArray(char* b, int m);
- void L116(char * b, int m, char a);
- node* startW;
- node* end;
- };
- void Redoct::creatList(ifstream & f)
- {
- List();
- head = new node;
- char data;
- node* tail = head;
- while (f.get(data))
- {
- NewElem(data);
- tail->next = marker;
- tail = marker;
- }
- Reset();
- head=head->next;
- Del();
- }
- Redoct Redoct::startWord()
- {
- marker = pred;// на пробеле до слова
- Redoct k;
- k.head = new node;
- node* tail = k.head;
- //k.head->info = marker->info;
- Move();
- while (marker != NULL && marker->info != ' ')
- {
- k.marker = new node;
- k.marker->info = marker->info;
- k.marker->next = NULL;
- tail->next = k.marker;
- tail = k.marker;
- Move();
- }
- k.end = tail;
- k.marker = k.head;
- k.head = k.head->next;
- startW = k.head;
- return k;
- ///маркер на пробеле после слова
- }
- bool Redoct::Begin(char a)
- {
- return (head->info == a);
- }
- bool Redoct::End(char a)
- {
- return (end->info == a);
- }
- bool Redoct::InWord(char a)
- {
- bool t = false;
- marker = head;
- while (marker!=NULL&&!t)
- {
- if (marker->info == a)
- t = true;
- Move();
- }
- return t;
- }
- bool Redoct::Same(char * a, int n)///
- {
- bool t = false;
- int i = 0;
- while (a[i] == marker->info&&i<n)
- {
- i++;
- Move();
- }
- if (i == n&&marker->info==' ')
- t = true;
- return t;
- }
- Redoct Redoct::Copy()
- {
- Redoct k;
- k.head = NULL;
- k.marker = NULL;
- k.pred = NULL;
- Reset();
- marker = startW;
- while (marker!=NULL&& marker->info != ' ')
- {
- k.Add(marker->info);
- Move();
- }
- return k;
- }
- bool Redoct::Palindrom()//
- {
- Redoct k = Copy();//copy слова
- node*q = head;
- int n = 0, m = 0;
- while (q->info != ' ')//узнаем длину слова
- {
- q = q->next;
- n++;
- }
- marker = head;
- for (int i = 0; i < n/2; i++)
- {
- if (k.head->info == marker->info)
- m++;
- k.head = k.head->next;
- Move();
- }
- return (m == n/2);
- }
- void Redoct::Perevorot()
- {
- node *q1, *q2, *q3, *temp = NULL;
- Reset();
- q1 = head;
- if (marker->next->info!=' ')
- {
- q2 = q1->next;
- q3 = q2->next;
- while (q3->info != ' ')
- {
- q1->next = temp;
- q2->next = q1;
- temp = q1;
- q1 = q2;
- q2 = q3;
- q3 = q3->next;
- }
- q1->next = temp;
- q2->next = q1;
- marker = q2;
- }
- }
- void Redoct::Show()
- {
- marker = head;
- if (head->next == NULL)
- cout << "List is empty" << endl;
- else
- while (marker != NULL)//&& marker->info != ' '
- {
- cout << marker->info;
- Move();
- }
- }
- void Redoct::Delet()////
- {
- marker = pred;
- while (marker!=NULL&&marker->info!=' ')
- {
- Del();
- }
- if (marker != NULL)
- pred->next = marker;
- }
- Redoct Redoct::creatArray(char * b, int m)
- {
- Redoct k;
- k.head = new node;
- node *tail = k.head;
- for(int i=0; i<m;i++)
- {
- k.NewElem(b[i]);
- tail->next = k.marker;
- tail = k.marker;
- }
- k.marker = k.head;
- k.head = k.head->next;
- k.end = tail;
- return k;
- }
- void Redoct::L116(char * b, int m, char a)
- {
- Reset();
- Redoct K;
- node*temp, *current;
- startW = head;
- while (marker->next != NULL)
- {
- Redoct head1 = creatArray(b, m);///создаем список из слова, которое нужно вставить
- K=startWord();
- current = marker;
- if (K.head != NULL)
- {
- temp = pred->next;
- if (K.Begin(a))
- {
- pred->next = head1.head;//перед началом ставим новое слово
- head1.end->next = temp;
- }
- pred = marker;
- }
- }
- }
- #include "RedoctList.h"
- #include <iostream>
- #include <fstream>
- using namespace std;
- int main()
- {
- Redoct l;
- ifstream f("Text.txt");
- l.creatList(f);
- char b[] = {"VgggO "};
- int m = sizeof(b)-1;
- char y = 'y';
- l.L116(b, m, y);
- l.Show();
- system("pause");
- return 0;
- }
- ygkt rvgy egk yfuf dk
- VgggO ygkt rvgy egk VgggO yfuf dk
Advertisement
Add Comment
Please, Sign In to add comment