Advertisement
VictoriaLodochkina

lab 3 z3 last test

Mar 5th, 2020
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 KB | None | 0 0
  1. #include <iostream>
  2. #include <string.h>
  3. #include <stdio.h>
  4. using namespace std;
  5.  
  6. int lengthString(char*);
  7. void strinsi(char*, char*, unsigned* mas1);
  8. char* Strcpy1(char*, char*);
  9.  
  10. int main()
  11. {
  12.     char* stroka1 = new char[15];
  13.     char* stroka2 = new char[5];
  14.     int n;
  15.     cout << "Enter number of pastes: " << endl;
  16.     cin >> n;
  17.     unsigned int* mas = new unsigned int[n + 1];
  18.     cout << "Enter positions: " << endl;
  19.     mas[0] = n; //количество вставок
  20.     for (int i = 1; i < n + 1; i++)
  21.     {
  22.         cin >> *(mas + i);
  23.     }
  24.     cout << "Enter stroka1: ";
  25.     getchar(); //чтобы \n не попал в ввод
  26.     scanf("%s", stroka1);
  27.     cout << "Enter stroka2: ";
  28.     getchar();
  29.     scanf("%s", stroka2);
  30.     strinsi(stroka1, stroka2, mas);//DANGER!!!!!!!!!!!
  31. }
  32. int lengthString(char* stroka)
  33. {
  34.     int i;
  35.     for (i = 0; *(stroka + i) != '\0'; i++); ////////////[]
  36.     return i;
  37. }
  38.  
  39. char* Strcpy1(char* dst, char* src)
  40. {
  41.     char* pt = dst;
  42.     while (*src)
  43.         *(dst++) = *(src++);
  44.     *dst = 0;
  45.     return pt;
  46. }
  47.  
  48. void strinsi(char* str, char* substr, unsigned* i)
  49. {
  50.     int count = 0;
  51.     int n = i[0];
  52.         for (int j = 1; j < (n+1); j++)
  53.     {
  54.         int l1 = lengthString(str);
  55.         int l2 = lengthString(substr);
  56.         char* rezult_str = new char[l1 + l2 + 1];                // строка - сборка +1 для символа конца строки
  57.         i[j]--;
  58.         int poz = i[j] + count * l2;
  59.         for (int x = 0; x < poz; x++)            // копируем часть первой строки до нужного индекса
  60.             *(rezult_str + x) = *(str + x);
  61.         for (int x = 0; x < l2; x++)            //добавляем вставляемую строку
  62.             *(rezult_str + x + poz) = *(substr + x);
  63.         for (int x = poz; *(str + x) != 0; x++)     //добавляем оставшуюся часть первой строки///////////
  64.             *(rezult_str + x + l2) = *(str + x);/////////////
  65.         *(rezult_str + l1 + l2) = '\0';///////////////
  66.         Strcpy1(str, rezult_str);
  67.         count++;
  68.     }
  69.         cout << "Result: ";
  70.         printf("%s", str);
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement