Advertisement
JouJoy

Untitled

May 20th, 2020
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.60 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4. using namespace std;
  5. struct node
  6. {
  7.     char data;
  8.     node* next = NULL;
  9. };
  10. void create_list(node*& top, int n, char* S) //создание листа
  11. {
  12.     int i;
  13.     top = new node;
  14.     top->data = S[0];
  15.     node* p=top;
  16.     node* p1;
  17.     for (i = 1; i < n; i++)
  18.     {
  19.         p1 = new node;
  20.         p1->data = S[i];
  21.         top->next=p1;
  22.         top = top->next;
  23.     }
  24.     top = p;
  25. }
  26. void insert_before(node*& top, char* w, node*& ww) //вставить элемент x перед q
  27.  
  28. {
  29.     node* ww1 = ww;
  30.     node* p, * r;
  31.     node* c=top;
  32.     r = top;
  33.     p = new node;
  34.     int i = 0;
  35.    
  36.         if (top->data == 'a')
  37.         {
  38.             c = top;
  39.             top = ww;
  40.             while (ww->next != NULL)
  41.             {
  42.                 ww = ww->next;
  43.             }
  44.             ww->next = c;
  45.             r = top;
  46.         }
  47.    
  48.     top = c->next;
  49.     while (top->next != NULL)
  50.     {
  51.         if ((top->next->data == 'a')&&top->data==' ')
  52.         {
  53.             c = top->next;
  54.             top->next = ww;
  55.             while (ww1->next != NULL)
  56.             {
  57.                 ww1=ww1->next;
  58.                 ww = ww->next;
  59.             }
  60.             ww->next = c;
  61.             //r = top;
  62.             top = ww->next;
  63.             //top = c;
  64.             //top = top -> next;
  65.         }
  66.         top = top -> next;
  67.     }
  68.    
  69.     top = r;
  70. }
  71.  
  72.  
  73. void show_list(node* top) //показать список
  74. {
  75.     node* p;
  76.     p = top;
  77.     while (p)
  78.     {
  79.         cout << p->data;
  80.         p = p->next;
  81.     }
  82.     cout << endl;
  83. }
  84. int find(node*& top, char* v2)
  85. {
  86.     int i = 0;
  87.     node* p = top;
  88.     bool t = false;
  89.     int numb;
  90.     int f = strlen(v2);
  91.     for (i = 0; i < f; i++)
  92.     {
  93.         if (v2[i] == p->data)
  94.         {
  95.  
  96.         }
  97.     }
  98.     while ((p->next != NULL) && !t)
  99.     {
  100.         numb = i;
  101.         if ((v2[i] == p->data) && (p->data != ' ') && i < f)
  102.         {
  103.             i++;
  104.             p = p->next;
  105.  
  106.         }
  107.         else if ((p->data == ' ') && (i + 1 == f))
  108.         {
  109.             t = true;
  110.             return numb;
  111.         }
  112.         p = p->next;
  113.     }
  114.     return 0;
  115. }
  116. node* previous(node* top, node* p) // найти предыдущий элемент
  117.  
  118. {
  119.     node* pr, * q;
  120.     q = top;
  121.     pr = NULL;
  122.     while (q != p && q)
  123.     {
  124.         pr = q;
  125.         q = q->next;
  126.     }
  127.  
  128.     if (q == p) return pr;
  129.     return NULL;
  130. }
  131.  
  132. void push(node*& top, int data) // положить значение в список
  133. {
  134.     node* p;
  135.     p = new node;
  136.     p->data = data;
  137.     p->next = top;
  138.     top = p;
  139. }
  140.  
  141. void insert_list_before(node*& top, node* q, int x) //вставить элемент x перед q
  142.  
  143. {
  144.     node* p, * r;
  145.     p = new node;
  146.     r = previous(top, q);
  147.     if (q == top) push(top, x);
  148.     else
  149.         if (r == NULL)
  150.         {
  151.             cout << " sorry, impossible insert element " << endl;
  152.             system("pause");
  153.             exit(-1);
  154.         }
  155.         else
  156.         {
  157.             p->data = x;
  158.             p->next = r->next;
  159.             r->next = p;
  160.         }
  161. }
  162.  
  163.  
  164. void insert_before(node*& top, char* w) //вставить элемент x перед q
  165.  
  166. {
  167.     node* p, * r;
  168.     r = top;
  169.     p = new node;
  170.     int i = 0;
  171.     while (top!=NULL)
  172.     {
  173.         if ((previous(top, r) == NULL) && top->data == 'a')
  174.         {
  175.             for (i = 0; i < strlen(w); i++)
  176.             {
  177.                 p = new node;
  178.                 p->data = w[i];
  179.                 p->next = top;
  180.                 top = p;
  181.             }
  182.         }
  183.         else if (top->next != NULL)
  184.             if (top->data == 'a' && top->next->data == ' ')
  185.             {
  186.                 for (i = 0; i < strlen(w); i++)
  187.                 {
  188.                     p = new node;
  189.                     p->data = w[i];
  190.                     p->next = top;
  191.                     top = p->next;
  192.                     previous(top, p)->next = top;
  193.                 }
  194.             }
  195.         top = previous(top,top);
  196.     }
  197.     top =r ;
  198. }
  199.  
  200.  
  201. void insert(node*& top, char* w)
  202. {
  203.     node* p = top;
  204.     node* p1;
  205.     if (top->data == 'a')
  206.     {
  207.         p1;
  208.     }
  209.     while (top->next!=NULL)
  210.     {
  211.        
  212.     }
  213.  
  214. }
  215. void zamena(char* v1, char* v2, node*& top)
  216. {
  217.     int i;
  218.     bool t = false;//слово не заменено
  219.     node* p = new node;
  220.     p->next = top->next;
  221.     int len = strlen(v1);
  222.     node* p1;
  223.     int address = find(top, v2);
  224.     for (i = 0; i < address; i++)
  225.     {
  226.         top = top->next;
  227.     }
  228.     i = 0;
  229.     while (((top->data != ' ') && i != len) && top->next != NULL)
  230.     {
  231.         if (top->data == ' ')
  232.         {
  233.             p1 = new node;
  234.             p1->data = v1[i];
  235.             p1->next = top;
  236.             top = p->next;
  237.             i++;
  238.         }
  239.         /*  else if (i < len)
  240.             {
  241.                 while ((top->next->data!=' ')&&top->next->next!=NULL)
  242.                     top->next = top->next->next;
  243.             }*/
  244.         else
  245.         {
  246.             top->data = v1[i];
  247.             i++;
  248.             top = top->next;
  249.         }
  250.         //top = top->next;
  251.     }
  252.     top->next = p->next;
  253. }
  254.  
  255. int main()
  256. {
  257.  
  258.     setlocale(LC_ALL, "rus");
  259.     node* text;
  260.     node* ww;
  261.     char S[128] = ""; // для сохранения строки
  262.  
  263.     cout << "Введите текст латиницей (не больше 128 символов):\n";
  264.     cin.getline(S, 128);
  265.     int n;
  266.     int i;
  267.     n = strlen(S);
  268.     create_list(text, n, S);
  269.     cout << "Text t: ";
  270.     show_list(text);
  271.     cout << endl;
  272.     char w[128];
  273.     cout << "Введите первое слово:\n";
  274.     cin.getline(w, 128);
  275.     create_list(ww, strlen(w), w);
  276.     insert_before(text, w, ww);
  277.     show_list(text);
  278.     return 0;
  279.     system("pause");
  280. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement